php как сохранить сессионное состояние на длительный период времени? проблемы - PullRequest
0 голосов
/ 19 февраля 2010

У меня проблемы с сохранением состояния сеанса в течение длительного периода времени. Я использую сессии, чтобы сохранить состояние входа в систему. Мне требуется приведенный ниже фрагмент кода вверху каждой из моих страниц перед любым другим кодом. Во-первых, есть ли какие-то настройки, которые я пропускаю?

session_cache_expire(2880); //set session to expire in 48 hours 
session_start();

Некоторые люди вышли из системы до истечения 48 часов. Какие типы вещей могут вызвать это? Я знаю, закрытие браузера убивает сеанс, и это не так.

Насколько я могу судить, это происходит, когда пользователь неактивен в течение нескольких часов или более.

Пользователи никогда не выходят из системы во время активного просмотра сайта.

Что дает?

Ответы [ 2 ]

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

session_cache_expire влияет только на срок действия HTTP-кэша.То, что вы хотите сделать, это использовать куки для установки данных вашего сеанса.

Ниже приведен пример, который я использовал для сеансов входа / выхода из системы.

<?php

session_start();

if ($action == "logout") {
  setcookie('sId', '', time()-60*60*24*365); //set sId cookie to expire

  session_destroy();
} else if (empty($_SESSION['sId'])) { //if cannot get sId from session
  if (isset($_COOKIE['sId'])) { //check if sId is in cookie
    $sId = $_COOKIE['sId'];
  } else { //get a new sId and set to cookie
    $sId = session_id();
    setcookie('sId', $sId, time()+60*60*24*365);
  }

  $_SESSION['sId'] = $sId; 
} else { //get sId from session
    $sId = $_SESSION['sId'];
}

?>
1 голос
/ 19 февраля 2010

Это влияет только на то, как долго браузер кэширует страницы сессий.

Попробуйте установить переменную gc_maxlifetime (значение в секундах):

ini_set("session.gc_maxlifetime", "172800");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...