Сессия никогда не должна истекать сама по себе

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

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

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

Edit:

session_cache_expire(0);
session_start();

- это способ записи для этого?

Ответы

Ответ 1

В этой ситуации часто используется решение:

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

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

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

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

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


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


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


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


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

Ответ 2

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

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

Ответ 3

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

Также см. мой ответ на другое сообщение: Быстрый вопрос о сеансах в PHP, в котором объясняется, как оставаться в системе. Просто не выполняйте задачу cronjob/sheduled если вы хотите, чтобы пользователь оставался включенным навсегда.