Почему мой CGI :: Session постоянно очищается случайно? - PullRequest
2 голосов
/ 17 февраля 2010

Сессия загружается нормально по большей части, но она случайным образом очищает все данные несколько раз, и я не знаю почему:

Создать мой новый сеанс:

$session = CGI::Session->new( "driver:file",undef,{Directory => '/tmp'} );

$session->param('logged_in', 1);
$session->expire('logged_in', '+10m');

$session->expire('+1h');

Теперь, когда я перехожу на другую страницу и загружаю сеанс, я делаю:

$session = CGI::Session->load ( "driver:file", $sid, {Directory => '/tmp'} );

return 0 if $session->is_expired;

return 0 if !$session->param('logged_in');

return $session;

Проблема, с которой я столкнулся, заключается в том, что иногда, до того, как поднимется 10-минутная отметка, параметр 'logged_in' пуст, когда его не должно быть. Почему это могло произойти?

1 Ответ

1 голос
/ 17 февраля 2010

Во-первых, вы, кажется, не используете строгий : вы должны. Во-вторых, не используйте косвенную запись объекта. То есть используйте CGI::Session->new.

Чтобы узнать, что происходит, используйте генератор последовательных идентификаторов для отладки и убедитесь, что вы смотрите на сеанс, который, как вы думаете, вы смотрите. Убедитесь, что вы создали сеанс при входе в систему, но с этого момента вы load it.

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

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