Сроки PHP слишком быстро выходят из строя
Я использую сеансы php на своем веб-сайте, и кажется, что они "исчезают" в произвольные промежутки времени. Я не знаю, если они тайминга из-за бездействия или что-то не так с моим кодом, но есть ли способ контролировать сеансы, когда они истекают?
Как я могу поместить что-то в свой код или изменить что-то в файле php.ini?
Обновление - Итак, просто и обновляйте здесь, я переключил хосты и волшебным образом начал работу сессий. Я не знаю, что было не так, но, видимо, они не хотели работать правильно.
Ответы
Ответ 1
Случайное истечение - классический симптом каталога данных сеанса, разделяемого несколькими приложениями: один с самым коротким временем session.gc_maxlifetime
, вероятно, удалит данные из других приложений. Причина:
Мой совет заключается в том, что вы настраиваете личную папку сеансов для своего приложения. Это можно сделать с помощью session_save_path()
function или установки session.save_path
директива конфигурации. Пожалуйста, проверьте свою документацию по инфраструктуре для получения точных сведений о том, как это сделать в вашей собственной базе кода.
Ответ 2
Debian использует задание cron для автоматического завершения сеансов безопасным образом. Если вы используете Debian, посмотрите/etc/cron.d/php5.
Ответ 3
Вы можете использовать эту технику для совместимости своего приложения в соответствии с вами. Вы должны внести несколько изменений в соответствии с вашей системой.
// 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>";
Все лучшее!!!!
Ответ 4
Попробуйте использовать эту часть кода:
session_start();
$inactive = 600;
$session_life = time() - $_SESSION['timeout'];
if($session_life > $inactive) {
session_destroy();
header("Location: logoutpage.php");
}
$_SESSION['timeout']=time();