2012-05-20 4 views
5

Я использую Zend с истечением срока действия сеанса до 1800 секунд. Мне было интересно, обновляется ли это время окончания сеанса до 1800 секунд каждый раз, когда я делаю запрос от браузера на сервер от имени пользователя, а также когда пользователь загружает новую страницу или он просто обновляется, когда пользователь загружает новая страница?Истечение срока действия PHP - когда оно обновляется?

+2

вы можете установить его на 5 секунд и проверить его. – goat

+0

Вероятно, это зависит от того, как вы используете сеанс и какие параметры и конфигурации вы используете. – RockyFord

ответ

2

Когда пользователь загружает новую страницу, то есть браузер, выполняющий запрос на сервер от имени пользователя. Таким образом, два сценария, которые вы нарисовали выше, - это одно и то же.

Когда сеанс запущен, идентификатор сеанса отправляется в браузер, который обычно хранит его в файле cookie. Затем браузер использует файл cookie для передачи идентификатора сеанса на сервер с каждым запросом на идентификацию пользователя. Сервер отслеживает, когда сеанс истекает, и эта область может немного запутаться (см. How do I expire a PHP session after 30 minutes?)

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

0

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

Так что да, сеанс обновляется при любом взаимодействии с сервером.

0

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

Вы можете увеличить время создания этого файла cookie в директиве php.ini или вручную с помощью функции ini_set или в файле .htacces. Вы устанавливаете директиву session.cookie_lifetime. Значения - это количество секунд или если установлено значение cookie, действительны до тех пор, пока вы не закроете браузер

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

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