Intereting Posts

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

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

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

Как мне это сделать??

Редактировать:

session_cache_expire(0); session_start(); 

это способ записи?

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

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

Сюда :

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

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

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

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

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

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

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

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

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

  • Персистентная версия Cookie для входа в систему
  • Улучшенная постоянная версия cookie для входа в систему

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

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