2014-01-21 4 views
2

Я пытаюсь войти в систему у пользователя в течение 2 недель, если вы входите в систему с помощью Запомнить меня, а затем я установил некоторые переменные в сеансе и cookie, установленные на 2 недели. Он правильно настроен, я напечатал его и получил значение session_cookie_lifetime = 1209600 и session_gc_maxlifetime = 1209600. Я также распечатываю сеанс и получил правильное значение в $_SESSION.php PHPSESSID существует, но сеанс уничтожен

После входа на сайт, когда я закрыл свой компьютер и снова открыл свой сайт, кажется, что он работает (он хранит меня как пользователя входа). Но когда я закрываю свой компьютер, и на следующий день, когда я открываю свой браузер, он не работает, и он показывает, что я не зарегистрирован на своем сайте. Я напечатал $_COOKIE и $_session. Он показывает, что в печенье есть:

[PHPSESSID] => svikos35bgclmebk2cqraiddt2 

Но сеанс пуст.

Я получил эту форму MODx материал:

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

Я использую modx revo. Это немного описательный вопрос. дайте мне знать, что вам нужно что-то еще. Все, что может мне помочь (ссылка на блог, любые настройки, любые предложения), будет высоко оценена.
Заранее спасибо

+2

RTFM: http://php.net/session_destroy «Если cookie используется для ... то cookie необходимо удалить». 'session_destroy' в основном эквивалентен' $ _SESSSION = array() 'и не уничтожает ничего другого, кроме содержимого сеанса. –

+2

сеанс сохраняется до закрытия браузера. вам может потребоваться повторно создать сеанс из файла cookie. – bansi

+0

, если мне нужно заново создать сеанс, тогда я думаю, что сеанс должен быть пустым для каждого раза после закрытия моего браузера.но он имеет все значения в сеансе после перезапуска браузером. Он ушел только после следующего дня после входа в систему, когда я открываю браузер. фактически сеанс и cookie автоматически обрабатываются modx. насколько я знаю, мне просто нужно установить его –

ответ

2

Это происходит только через день? Может ли tmpwatch удалять файлы сеанса с сервера?

+0

да это случается после одного дня. можете ли вы объяснить немного больше? –

+1

tmpwatch - это команда, обычно записываемая в cron-скрипт, который просто удаляет все файлы в каталоге/tmp через определенное время [обычно каждые 24 часа] http://linux.about.com/library/cmd/blcmdl8_tmpwatch. htm Если это произойдет, вы можете настроить собственный php.ini, который использует другой каталог tmp. –

+0

спасибо. на самом деле это было так. он удаляет файлы сеанса на сервере. –

1

session_cookie_lifetime и session_gc_maxlifetime не гарантируют вам, что сессия будет сохранена в течение недели. GC убивает неиспользуемые сеансы. Проверьте документацию PHP об этих параметрах, и вы видите, что не можете быть уверены, что ваш сеанс будет на сервере, и вы не уверены, что ваш сеанс будет уничтожен после этого времени. GC isync.

Вам необходимо заново создать $ _SESSION после входа в систему (и autologin), если он не существует.

Проверить эту статью (в России, попробуйте Google Translate: PHP GC: unexpected behavior

+0

Спасибо @ BaBL86 вы можете посмотреть мой обновленный вопрос? –

+0

Как я могу убедиться, что cookie установлен правильно? –

+0

Что вы подразумеваете под "правильным"? Если вы уверены, что добавьте md5 или sha хэш в свой файл cookie из user_id и pwd со временем входа в систему, например (вам нужно также сохранить время входа в профиль пользователя, в таблицу users в mysql) и проверить его. – BaBL86

0

Основная идея ЗАСЕДАНИЯ заключается в том, когда вы создаете или вызвать session_start() метода сервер генерирует идентификатор сеанса и сохранить его в памяти сервера Кроме того, сервер создает файл cookie на вашей клиентской машине, в котором cookie содержит id, который связан с идентификатором сеанса на стороне сервера. Когда вы вызываете session_destroy(), сервер метода удаляет этот идентификатор на стороне сервера, но cookie на стороне клиента не Поэтому ваш идентификатор сеанса все еще отображается. Вы также можете проверить очистку кеш-файлов и файлов cookie. ваша сессия будет уничтожена.

+0

- это значит, что он не устанавливает cookie для 1209600? если да, то почему? –

+0

Nop, Просто подумайте. Когда вы войдете в свою учетную запись Gmail после очистки кеша браузера и файла cookie, вы автоматически выйдете из системы. Поскольку сеанс в браузере очищается. –

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