Сессии PHP истекают слишком быстро

Я использую php Sessions на своем веб-сайте, и кажется, что они «исчезают» через случайные интервалы. Я не знаю, истекают ли они из-за неактивности или что-то не так с моим кодом, но есть ли какой-то способ контролировать сеансы, когда они истекают?

Например, я могу вставить что-то в свой код или что-то изменить в файле php.ini?

Update- Так что просто и обновившись здесь, я переключил хосты, и волшебным образом сессии начали работать. Я понятия не имею, что случилось, но, видимо, они не хотели работать правильно.

34
задан Adam Libuša 18 August 2013 в 13:22
поделиться

4 ответа

Случайное истечение срока действия является классическим признаком того, что каталог данных сеанса используется несколькими приложениями: тот, у которого самый короткий session.gc_maxlifetime время, скорее всего, удалит данные из других приложений. Причина:

  1. PHP по умолчанию хранит файлы сессий во временном системном каталоге.
  2. Встроенный обработчик файлов не отслеживает, кому принадлежит какой файл сеанса (он просто сопоставляет имя файла с идентификатором сеанса):

    Nothing bug good old files

Мой совет: настройте частный пользовательский каталог сеанса для своего приложения. Это можно сделать с помощью функции session_save_path() или установки директивы конфигурации session.save_path. Пожалуйста, проверьте документацию вашего фреймворка для получения точных сведений о том, как это сделать в вашей собственной кодовой базе.

44
ответ дан 27 November 2019 в 16:37
поделиться

Попробуйте использовать эту часть кода:

  session_start();
  $inactive = 600;
  $session_life = time() - $_SESSION['timeout'];
  if($session_life > $inactive) { 
     session_destroy(); 
     header("Location: logoutpage.php"); 
  }
  $_SESSION['timeout']=time();
3
ответ дан 27 November 2019 в 16:37
поделиться

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

// 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>”;
7
ответ дан 27 November 2019 в 16:37
поделиться

Debian использует задание cron для безопасного автоматического завершения сеансов. Если вы используете Debian, посмотрите /etc/cron.d/php5.

15
ответ дан 27 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: