Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Корректная работа с сессией, Слежение за пользователями онлайн 
:(
    Опции темы
tikitiki
Дата 16.12.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Feldmarschall, спасибо за развёрнутый ответ. Я не думал, что ты ответишь. Про функцию session_register удивил, что устарела. Остальное ясно, хотя тоже новое почерпнул. Про то, что логины не надо md5 обрабатывать-тоже оказалось для меня открытием. В общем спасибо. Мне надо всё это будет учесть.
Насчёт того, что проверяю ли я, что пользователь зарегистрирован, который кладёт товар в корзину-да я проверяю-ищу в бд логин (это мое собственное решение было, может не правильно). Если логина нет-значит не регистрировался пользователь. Для логинов создал таблицу бд-с логинами, паролями в MD5,  другой информацией-e-mail и др. В этой таблице и делаю поиск.
Да. Всё-таки спрошу. Можно ли страницы связать методом POST-через формы или способом без отправки формы-при этом в скрытом поле передать логин пользователя и на каждой странице проверять это поле для того, чтоб знать какой пользователь зашёл на страницу (опять же способ отчасти мой, может не верный). 
В общем неувязок много у меня. Прошу помочь распутать.


--------------------
PM   Вверх
Feldmarschall
Дата 16.12.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: -2
Всего: 32



Цитата(tikitiki @  16.12.2007,  18:53 Найти цитируемый пост)
Насчёт того, что проверяю ли я, что пользователь зарегистрирован, который кладёт товар в корзину-да я проверяю-ищу в бд логин 


Поправь меня, если я ошибаюсь.
Ты хочешь сказать, что берешь из сессии логин, проверяешь по базе, и если такой логин в базе есть - добавляешь в корзину?
И этот код работает даже после удаления сессии?

А если вместо проверки по базе просто вывести на экран логин - он выведется?
А ты уверен, что код проверки по БД у тебя правильный? А то у начинающих много разных хороших способов проверки, таких, например, как 
$result=mysql_query();
if ($result) echo "логин есть!";

Цитата(tikitiki @  16.12.2007,  18:53 Найти цитируемый пост)
. Можно ли страницы связать методом POST-через формы 

Нет, нельзя. во-первых, потому, что страницы надо связывать методом GET - он для этого и предназначен.
Во-вторых, потому, что логин нельзя передавать от пользователя. Логин должен быть только на сервере. Для этого и существуют сессии -чтобы хранить данные на сервере

А неувязки давай сюда. Я как раз специализируюсь на их распутывании.
Меня, в частности, интересует, что именно неправильного было в работе первого кода от Anarki
PM   Вверх
tikitiki
Дата 16.12.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Feldmarschall, ты не ошибся. Код именно такой, как ты говоришь. И работает после удаления сессии. Логин тоже выводится на страницу. Я много раз проверял при тестировании. И код проверки по бд-я думаю -правильный. 
Про то, что логин надо на сервере хранить-понятно. Но почему ты говоришь, что при этом нельзя использовать метод POST? Я сначала авторизую пользователя на сайте с помощью проверки есть ли логин в бд, затем уже сохраняю в переменную сессии логин и затем можно передать в скрытом поле методом POST формы или ещё как-то (передать переменную сессии от страницы к странице видимо не проблема).
Насчёт первого кода Anarki - код я понял, он мне понятен. Извиняюсь, что не написал подробно сразу. Но я его когда тестировал в отдельном скрипте, то при вводе логина происходил переход на ту же страницу с вводом логина. Видимо так и надо-пользователь вошёл, а форма авторизации осталась. Но дело в том, что я разными способами не смог добиться, чтоб увидеть на странице ссылки на главную страницу, на форму и на выход. Редирект я убрал в качестве теста-после этого появились данные ссылки, но логика работы скрипта стала не совсем  такой, как должно быть, хотя похоже. Здесь описывать полностью работу скрипта видимо долго. Меня сильно удивило-но я не понял, что не так. 


--------------------
PM   Вверх
Anarki
Дата 16.12.2007, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 1
Всего: 11



tikitiki
было бы намного проще, действительно, не строить туманные догадки, а посмотреть исходный код, который работает не так как надо.


--------------------
PM WWW   Вверх
Feldmarschall
Дата 16.12.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: -2
Всего: 32



Так.
Ты хочешь сказать, что после убиения сессии логин все равно выводится?
С этого, пожалуй, и надо начинать, отбросив все остальное в сторону, как лишнее.
вообще-то, это очень странно. Выходит, что сессия не убивается.
Скажи, ты сам можешь написать код, демонстрирующий такой эффект? Чтобы в нем не было ничего лишнего, а только 4 шага - на первом записываем значение в сессию, на втором - выводим, на третьем - убиваем (и выводим), на четвертом - снова выводим.

А зачем передавать логин методом POST, если он и так передается в сессии?
Почему нельзя - я уже писал: логин должен быть только на сервере. А не передаваться от пользователя методом POST.

Со скриптом Anarki стало понятно. С этим тоже надо разобраться, но позже. 

Вообще - странно как-то у тебя ведет система. Если последняя ошибка понятная, в общем-то, то неубивание сессии - это очень странно. Я пока предполагаю какой-то косяк в логике твоих скриптов. Только не могу понят - какой. В общем, тестовый скрипт очень не помешает
PM   Вверх
tikitiki
Дата 16.12.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Здесь пока два файла. Может ещё какие-нибудь надо. Их много...

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  includes.rar 3,96 Kb


--------------------
PM   Вверх
tikitiki
Дата 16.12.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Feldmarschall, логин после убиения сессии может не выводится. Я не проверял. А то, что скрипт добавляет товар -я это проверил, с помощью того, что скрипт выводит, что товар добавлен в корзину. Занеслась ли информация в бд-затрудняюсь сказать (может и проверял)- но по логике моего скрипта занеслась. 

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  includes.rar 3,96 Kb


--------------------
PM   Вверх
Feldmarschall
Дата 16.12.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: -2
Всего: 32



Я не обнаружил ни в одном из файлов команды session_destroy.
Следовательно, ответ прост - ты просто не удаляешь сессию. Как я и думал, проблема была в самом скрипте. Увы, от таких ошибок форум помочь не в состоянии. Или программист понимает, что он пишет - или нет.
Для лучшего понимания рекомендую перед тем, как писать программу, рисовать её логику на бумаге.

Что делает куча кода в начале скрипта orders, разбираться лень. Проще написать, что там на самом деле должно быть
Код

session_start();
if(!isset($_SESSION["login"])){
  exit;
}

Всё. Больше ничего не надо.

Код login.php переписать так, чтобы он работал только с массивом $_SESSION. Причем так, чтобы имена ключей не совпадали с именами локальных переменных. К примеру, если есть переменная $login, то в $_SESSION не должно быть элемента $_SESSION["login"]. Пусть это будет $_SESSION["login_name"]

Там же сделать код выхода, который удаляет $_SESSION["login_name"]

Добавлено @ 22:17
По поводу кода Аnarki. Скорее всего, у тебя не передается идентификатор сессии с локейшеном. Это бывает на локальных машинах.


Это сообщение отредактировал(а) Feldmarschall - 16.12.2007, 22:26
PM   Вверх
tikitiki
Дата 16.12.2007, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Feldmarschall, спасибо. Видимо всё так. Но session_destroy есть в другом файле. Я сразу не соориентировлся какие файлы надо включить.


--------------------
PM   Вверх
Feldmarschall
Дата 16.12.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: -2
Всего: 32



видимо, до этого файла просто дело не доходит
PM   Вверх
tikitiki
Дата 16.12.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Цитата(Feldmarschall @  17.12.2007,  03:15 Найти цитируемый пост)
Скорее всего, у тебя не передается идентификатор сессии с локейшеном.

Я здесь не понял, что под локейшеном подразумевается.



--------------------
PM   Вверх
Feldmarschall
Дата 16.12.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: -2
Всего: 32



   header('Location: '.$_SERVER['PHP_SELF']); - вот это
PM   Вверх
tikitiki
Дата 16.12.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Цитата(Feldmarschall @  17.12.2007,  04:11 Найти цитируемый пост)
видимо, до этого файла просто дело не доходит 

Feldmarschall, посмотрел-сейчас может быть на самом деле до этого файла не доходит. Я искал по имени файла. Но выход был -файлы есть. И вроде работал.



--------------------
PM   Вверх
Feldmarschall
Дата 16.12.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: -2
Всего: 32



"вроде" или работал?
Ты кого сейчас уговариваешь - себя или меня? Меня бесполезно - у меня проблем с сессиями нет.
Себя - можешь, конечно. Но программа твоя от этого не заработает.
Я считаю, что все "вроде" надо проверить. И убедиться. Как это сделать - я тебе писал: проверить наличие логина в сессии. Ты этого делать не хочешь. Я тебя заставить не могу. Можем продолжить светскую беседу на форуме.

Добавлено через 2 минуты и 45 секунд
Я бы на твоем месте начал с того, чтобы переписал всю работу с сессиями заново. прочитав сначала документацию по ним.
Причем не встраивая сразу в свой готовый сайт, а сделав тестовую модель - файло с логином, файл с корзиной, другие нужнгые файлы. 
И проверил работу на них.
А когда все заработает - переносил бы код в стпрые файлы.
PM   Вверх
tikitiki
Дата 16.12.2007, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Здесь три файла с выходом. Какие-то из них были связаны. Почему три-так получилось. Что по ним можно сказать?

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  exit.rar 1,75 Kb


--------------------
PM   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0819 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.