Сессии Php, кажется, теряются / теряются при регенерации - PullRequest
2 голосов
/ 18 января 2012

В настоящее время я использую 24-часовой сеанс, чтобы пользователи оставались в системе, если они переходят на другую страницу сайта через 30 минут после начала сеанса, то сеанс будет регенерирован для продления времени окончания сеанса () + 24 часа.

Я использую php.ini, чтобы убедиться, что используются только сеансы cookie, и изменил время сохранения по умолчанию чуть более чем на 24 часа:

session.gc_maxlifetime = 90000
session.cookie_lifetime = 90000
session.use_trans_sid = 0
session.use_only_cookies = 1

Я использую следующее длявремя сеанса:

session_save_path("/home/user/sessions");
session_set_cookie_params("86400", "/");
session_name("auth");
session_start();

но в данный момент мои сеансы, похоже, теряются в течение первого часа.Файл cookie auth все еще существует, но, похоже, он не ссылается на информацию, которая была сохранена во время сеанса:

$_SESSION['userId'] = $row[0];
$_SESSION['created'] = time();

Это заставляет меня думать, что часть регенерации каким-то образом неверна?

Для регенерации cookie через 30 минут я использую:

if($_SESSION['created'] + 30 * 60 < time())
{
    session_regenerate_id();
    $_SESSION['created'] = time();
}

Нужен ли в вышеприведенном коде какой-либо способ сохранить идентификатор сеанса после регенерации?

Нравится:

$sid = session_id();
session_regenerate_id();
session_id($sid);
session_start();

или это не обязательно?Существуют ли другие причины, по которым мои сеансы могут быть потеряны / перепутаны?

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Время жизни сеанса (обычно) надежно.Но так как вы упоминаете, что они, кажется, стираются в течение часа, это заставляет меня думать, что на сервере установлена ​​операционная система, созданная на основе debian или debian.

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

Если сервер не основан на Debian, то я должен сказать, что не знаю.

0 голосов
/ 18 января 2012

Интересно, что когда сеанс создается, он сохраняет файл сеанса во временной папке на сервере, если этот файл будет удален или удален, тогда сеанс будет потерян, может ли это произойти?

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

Какую информацию вы храните в сеансе, поскольку она также будет потеряна.

...