Какие настройки php.ini необходимы, чтобы сеанс оставался активным в течение примерно двух дней? - PullRequest
5 голосов
/ 07 апреля 2011

http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime

говорит, что значение session.cookie_lifetime, равное 0, «продолжается до закрытия браузера».Это абсолютная максимальная длина, которую может иметь сессия (всегда стираемая, когда браузер закрыт), или установление session.cookie_lifetime, скажем, 23243245234, даст результат, который, вероятно, будет длиться дольше, чем когда браузер закрыт?

Более того, какие настройки php.ini мне нужно установить, чтобы сеансы длились где-то в течение двух дней, и есть ли причина безопасности, чтобы рекомендовать определенный (я бы ожидал, более низкий) лимит времени, иесли да, то какой будет рекомендуемый период?

Намеренное поведение Редактировать: Вот чего я хочу достичь, возможно, я смогу понять поведение, получив некоторые предложения по настройке в противоположностьк конкретным значениям настроек php.ini:

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

Что бы я установил для настроек php.ini (и да, у меня есть прямой доступ к редактированиюphp.ini) чтобы достичь этого?

Ответы [ 5 ]

11 голосов
/ 07 апреля 2011

Есть два параметра, о которых вам нужно беспокоиться относительно сеансовПервый - это TTL для куки, другой - сколько лет файлу данных сеанса может стать до того, как он соберет мусор.

session.cookie_lifetime определяет в секундах, как долго будет длиться cookie, отправленный в браузер.По умолчанию это 0, что означает, пока браузер не закроется.Для двух дней это должно быть 172800 секунд.

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

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

Некоторые операционные системы выполняют автоматический сбор мусора во временных каталогах по умолчанию.Если PHP сконфигурирован для хранения там данных сеанса, то, если период GC для временного каталога короткий, вы можете потерять свой сеанс до того, как будет достигнуто значение в session.gc_maxlifetime.Чтобы избежать этого, убедитесь, что PHP хранит данные сеанса в месте, отличном от / tmp, или в любом другом временном каталоге вашей операционной системы.

4 голосов
/ 07 апреля 2011

Это означает, что сеанс теряется в момент закрытия браузера.

То есть файл cookie, содержащий этот идентификатор сеанса, удаляется вместе с событием onclose браузера.

session.cookie_lifetime указывает время существования файла cookie в секундах, который отправляется в браузер.

Рекомендуемый период в основном зависит от того, что необходимо сохранить в сеансе.Скажем, вы хотите, чтобы ваш пользователь входил в систему на сайте ( напомните мне ), вы должны пойти на самый большой период.Просто в качестве примера.

Если вы хотите, чтобы сеанс оставался живым в течение приблизительно двух дней, вы просто считаете

60 [секунд] * 60 [минут] * 48 [часов] = 172800 секунд

1 голос
/ 07 апреля 2011

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

Что касается вашего вопроса, на самом деле существуют две системы для управления сеансом.

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

Параметр, на который вы ссылаетесь ТОЛЬКО, определяет срок службы куки в браузере клиента, а не время сеанса.

Значение 0: cookie сохраняется до тех пор, пока браузер не закроется.

Настройка выше 0: сеанс длится столько секунд и заканчивается только после этого времени. Браузер можно открывать и закрывать столько раз, сколько захочет пользователь, и файл cookie сохраняется до истечения срока действия.

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

Вы можете изменить этот параметр в своем php.ini или использовать комбинацию session_get_cookie_params и session_set_cookie_params

Разъяснение

Игнорирование на стороне сервера. Клиент хранит cookie, который содержит SessionID и позволяет им получить доступ к сеансу. Если cookie потерян, клиент больше не имеет возможности доступа к сеансу и по существу потерян.

Значение 0 приведет к тому, что браузер клиентов будет сохранять куки-файлы до тех пор, пока браузер не закроется. Если бы пользователь оставался там браузером открытым в течение недели, файл cookie сохранялся бы в течение недели.

Значение больше 0 приведет к тому, что браузер клиентов сохранит cookie в течение этого количества секунд. Например. Если установлено значение 172800 секунд (2 дня), cookie будет храниться браузером в течение 2 дней. Если браузер закрыт в течение этих 2 дней, cookie-файл не уничтожается, он теряется только через 2 дня.

Зачем использовать 0

Использование 0 более безопасно, потому что, когда пользователь завершил использование вашего веб-сайта в общедоступной системе и закрыл браузер, cookie теряется, и сеанс больше не доступен, что не позволяет другому пользователю открыть браузер и продолжить сеанс. Ненадежно полагать, что пользователь завершит сеанс вручную (например, выйдет из системы), как это делают многие.

0 голосов
/ 17 апреля 2011

Короткое (но немного неточное) решение

Установите session.gc_maxlifetime до 172800 и session.cookie_lifetime до 0.


Расширенное и более точное решение

В общем случае session.gc_maxlifetime - это конфигурация для управления временем жизни сеанса. Поэтому установка этой директивы на 172800 истечет через 172800 секунд (теоретически). Но так как расчет возраста сеанса немного странный, вы можете реализовать более точную схему истечения срока действия. См. мой ответ на Как мне закончить сеанс PHP через 30 минут? для получения дополнительной информации.

При установке времени жизни файла cookie идентификатора сеанса на 0, файл cookie будет действителен до закрытия браузера.

0 голосов
/ 07 апреля 2011

Подождите, пока возникнет путаница .....

"Сессия" не будет потеряна, если браузер закроется .... это "Cookies", которые теряются при закрытии браузера.

«Сессия» в целом отличается от «Cookies».Сессия остается на сервере и может быть явно уничтожена.Принимая во внимание, что «Cookies» находятся на стороне клиента и могут быть уничтожены вручную или через определенный промежуток времени или при закрытии браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...