2015-02-20 5 views
0

У меня есть сайт, работающий на apache и использующий php. Иногда у меня есть пользователи на сайте, которые делают работу, а затем они внезапно теряют свою сессию. Я начинаю сессию сphp session time out неожиданно

session_start() 

и он помещает файл cookie PHPSESSID в браузер пользователя. У меня также есть

session.cookie_lifetime=0 

в моем файле php.ini. Я также выполняю длительный опрос javascript каждые 5 минут, чтобы узнать, активен ли сеанс.

Вот код PHP, который я использую, чтобы увидеть, если сеанс все еще активен

public function actionPollLogin() 
{ 
    if (isset($_SESSION['user']['id'])) 
    { 
     echo $this->renderAjaxJson(array("success"=>1)); 
    } else { 
     echo $this->renderAjaxJson(array("success"=>0)); 
    } 
} 

Если успех == 0, то я вернуть пользователя к публичной части сайта. Но, как я уже сказал, странно, что пользователь может активно использовать сайт, а затем простаивать в течение 20 секунд и выходить из системы. И для тестирования я дам сеанс на экран, чтобы пользователи были возвращены, чтобы подтвердить, что сеанс мертв.

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

Вот мои текущие настройки php.ini

session.hash_bits_pre_character=5 
session.hash_function=0 
session.cache_expire=180 
session.cache_limiter=nocache 
session.referer_check= 
session.gc_maxlifetime=1440 
session.gc_divisor=1000 
session.gc_probability=1 
session.serialize_handler=php 
session.cookie_httponly= 
session.cookie_domain= 
session.cookie_path=/ 
session.cookie_lifetime=0 
session.auto_start=0 
session.name=PHPSESSID 
session.use_only_cookies=1 
session.use_cookies=1 
session.use_strict_mode=0 

ответ

2

Docs

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

Итак, через 24 минуты ваши сеансы заканчиваются на стороне сервера и потенциально очищаются.

0

Решение для меня состояло в том, чтобы добавить эту строку после моего session_start();

$_SESSION['activity']=time(); 

Это обновление последней измененной даты файла сеанса каждый раз, когда пользователь взаимодействует с сайтом.