2009-08-25 3 views
11

Я использую функцию входа в систему на своем сайте с сеансом. Эта сессия моей учетной записи заканчивается через несколько минут, независимо от того, что пользователь вышел из системы или нет. Теперь, что я хочу, так это то, что сеанс должен истекать только тогда, когда пользователь выходит из системы. Если пользователь не выйдет из своей учетной записи, а затем возвращается через 2-3 дня, то он должен появиться в журнале.сеанс никогда не должен истекать сам по себе

у меня есть нашли несколько примеров, когда они сократили время окончания сеанса, но я хочу, чтобы он мог истечь только в случае выхода из системы пользователем, независимо от времени, которое он взял для выхода из системы.

как я могу это сделать ??

Edit:

session_cache_expire(0); 
session_start(); 

это способ записи, чтобы сделать это?

ответ

24

Решение, которое часто используется в этой ситуации, заключается в следующем:

  • не имеют слишком большую продолжительность сеанса: он истекает, если пользователь не активен (это именно так, как это работает - и это лучше для вашего сервера, если у вас много пользователей)
  • Когда пользователь входит в систему, вы устанавливаете файл cookie, который содержит то, что необходимо для его распознавания.
  • , если он возвращается на сайт (с файлом cookie, и без активного сеанса), вы используете информацию, содержащуюся в этом cookie, для автоматического входа в систему, повторного создания сеанса одновременно.

Таким образом:

  • вы не имеете тысячи сессий «активных» без уважительных причин
  • вы сохраняете стандартным образом сеансов работы

И у вас есть преимущество «никогда не отстраняется», по крайней мере, с точки зрения пользователя.

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


Это означает, однако, что, когда пользователь вручную регистрирует-аут, у вас есть конечно, удалить его сессию и файл cookie - поэтому он не сразу перезагружается автоматически.


Конечно, вы должны быть осторожны, о том, что вы установили в печенье: печенье не совсем безопасно, поэтому не храните пароль в нем, например ;-)


На самом деле, этот способ делать вещи - это то, как часто работает функция «запомнить меня»; за исключением, здесь, пользователи не должны проверить флажок, чтобы активировать «запомнить меня» ;-)


Если у вас нет времени, чтобы разработать такой материал, довольно быстрый и грязный путь для использования какого-либо запроса Ajax на всех ваших страницах, который будет просто «пинговать» страницу PHP на сервере - это будет держать сеанс активным (но это не совсем хороший способ сделать вещи: у вас все еще будет много сеансов на сервере у вас будет много бесполезного запроса ... и он будет работать только до тех пор, пока пользователь не закрывает свой браузер).

+0

я поставил печенье с именем пользователя и случайным числом сцепляется к нему, а затем Я сохранил его в базе данных. Когда вызывается страница, я проверяю системный файл cookie и сопоставляю его с тем, что находится в базе данных, если оба совпадения затем отображают человека, как зарегистрированное в противном случае. И когда человек выходит из системы, я установил cookie в null. Правильно ли это ??? и это безопасно ??? – developer

+0

Кажется, ОК для меня, по крайней мере, это никогда не будет «идеальной безопасностью», так как любой, кто использует компьютер парня, будет автоматически зарегистрирован, но этого должно быть достаточно, я полагаю :-) –

+0

ya Я понимаю безопасность вопрос. Ну спасибо Мартин :-) – developer

0

Вы удаляете свои куки-файлы во время тестирования? Включены ли файлы cookie? Вы чем-то скучаете по сессии в своем коде?

Также см. Мой ответ на другой пост: Quick question about sessions in PHP, в котором объясняется, как оставаться в системе. Просто не выполняйте задачу cronjob/sheduled, если вы хотите, чтобы пользователь оставался навсегда.

2

Вы не можете сделать это только с помощью внутренней обработки PHP. PHP всегда будет отправлять идентификатор сеанса в сеансовом cookie, который истекает, когда пользователь закрывает свой браузер. Чтобы получить какой-то автозапуск, вам понадобится сопроводительный код, который устанавливает более длительный файл cookie в браузере пользователя и обрабатывает распознавание этих файлов cookie и сопоставление между значением cookie и соответствующей учетной записью пользователя.

Обратите внимание, что это сильно влияет на проблемы безопасности, поэтому вам придется позаботиться о многом. Пожалуйста, прочтите следующую информацию о том, как можно автоматически входить функция может работать:

Смежные вопросы