Я использую php Sessions на своем веб-сайте, и кажется, что они «исчезают» через случайные интервалы. Я не знаю, истекают ли они из-за неактивности или что-то не так с моим кодом, но есть ли какой-то способ контролировать сеансы, когда они истекают?
Например, я могу вставить что-то в свой код или что-то изменить в файле php.ini?
Update- Так что просто и обновившись здесь, я переключил хосты, и волшебным образом сессии начали работать. Я понятия не имею, что случилось, но, видимо, они не хотели работать правильно.
Случайное истечение срока действия является классическим признаком того, что каталог данных сеанса используется несколькими приложениями: тот, у которого самый короткий session.gc_maxlifetime
время, скорее всего, удалит данные из других приложений. Причина:
Встроенный обработчик файлов не отслеживает, кому принадлежит какой файл сеанса (он просто сопоставляет имя файла с идентификатором сеанса):
Мой совет: настройте частный пользовательский каталог сеанса для своего приложения. Это можно сделать с помощью функции session_save_path()
или установки директивы конфигурации session.save_path
. Пожалуйста, проверьте документацию вашего фреймворка для получения точных сведений о том, как это сделать в вашей собственной кодовой базе.
Попробуйте использовать эту часть кода:
session_start();
$inactive = 600;
$session_life = time() - $_SESSION['timeout'];
if($session_life > $inactive) {
session_destroy();
header("Location: logoutpage.php");
}
$_SESSION['timeout']=time();
Вы можете использовать эту технику, чтобы сделать ваше приложение совместимым в соответствии с вашими требованиями. Вам необходимо внести несколько изменений в соответствии с вашей системой
// Get the current Session Timeout Value
$currentTimeoutInSecs = ini_get(’session.gc_maxlifetime’);
Изменить значение тайм-аута сеанса
// Change the session timeout value to 30 minutes // 8*60*60 = 8 hours
ini_set(’session.gc_maxlifetime’, 30*60);
//————————————————————————————–
// php.ini setting required for session timeout.
ini_set(‘session.gc_maxlifetime’,30);
ini_set(‘session.gc_probability’,1);
ini_set(‘session.gc_divisor’,1);
//if you want to change the session.cookie_lifetime.
//This required in some common file because to get the session values in whole application we need to write session_start(); to each file then only will get $_SESSION global variable values.
$sessionCookieExpireTime=8*60*60;
session_set_cookie_params($sessionCookieExpireTime);
session_start();
// Reset the expiration time upon page load //session_name() is default name of session PHPSESSID
if (isset($_COOKIE[session_name()]))
setcookie(session_name(), $_COOKIE[session_name()], time() + $sessionCookieExpireTime, “/”);
//————————————————————————————–
//To get the session cookie set param values.
$CookieInfo = session_get_cookie_params();
echo “<pre>”;
echo “Session information session_get_cookie_params function :: <br />”;
print_r($CookieInfo);
echo “</pre>”;
Debian использует задание cron для безопасного автоматического завершения сеансов. Если вы используете Debian, посмотрите /etc/cron.d/php5.