Управление тайм-аутом PHP-сессии, сброс счетчика при каждом клике - PullRequest
2 голосов
/ 20 октября 2011

Это НЕ обычный вопрос для session_set_cookie_params или session.gc_maxlifetime.Я копал Google и ничего не понял.

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

Что я делаю в каждом запросе, так это:

session_name('session_cookie_name');
session_set_cookie_params(600, '/'); // 600 is how much seconds in a ten minutes.
session_cache_limiter(FALSE);
session_start();

И я ожидаю результат, о котором я упоминал выше, учитывая, что для session.gc_maxlifetime установлено значение по умолчанию 1440

РЕДАКТИРОВАТЬ:

, что я получаю, каждые 600 секунд я получаю новый сеанс без данных, сохраненных из предыдущих запросов.

Как используется соглашениедостичь этого?

Ответы [ 3 ]

3 голосов
/ 22 февраля 2015

Используя setcookie, установите cookie с теми же параметрами, которые PHP устанавливает с помощью session_start:

  1. то же имя файла cookie сеанса (по умолчанию PHP PHPSESSID)
  2. тот же сеансid, полученный с помощью session_id()
  3. нового значения срока действия (в данном случае time() + $lifetime)
  4. того же пути (например, "/") и домена (часто $_SERVER['HTTP_HOST'])
3 голосов
/ 20 октября 2011

Что ж, ваше текущее решение не может гарантировать, что сессия будет собрана GC строго по истечении 10 минут по определению.

Лучшее решение - использовать время жизни сеанса по умолчанию (20 минут и более) и вручную обрабатывать время ожидания между щелчками.

Просто сохраните $_SESSION['last_click_time'] = time(); и сравните его. Если прошло более 600 секунд - делайте то, что вам нужно: обновить сеанс, выйти из системы, создать запись в журнале, отправить кому-нибудь электронное письмо и т. Д.

0 голосов
/ 20 октября 2011
$cur_time = time();
if($cur_time > $_SESSION['timeout']){
 //destroy the session (reset)
 session_destroy();
}else{
  //set new time
  $_SESSION['timeout'] = time() + 600;
}

Это то, что я бы сделал.

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