2017-01-03 2 views
0

У меня есть страница/система входа в систему, которая работала правильно в течение многих лет, оставив пользователя вошедшим в систему до тех пор, пока он не закрывает окно браузера или не выходит из системы вручную. Но в последнее время (начиная с вчера) после нескольких минут бездействия сеанс cookie/s, похоже, истекает, в результате чего пользователь автоматически выходит из системы.php session истекает случайно через несколько минут

Это происходит в разных браузерах и разных операционных системах, версия PHP - 5.6.29, которая была изменена недавно (до того, как она была 5.5 и даже 5.3).

Я создаю и обновляю сеанс на каждой странице с помощью session_start(). Сначала скрипт входа в систему проверяет имя пользователя и PW, а также получает некоторые другие пользовательские данные из базы данных. Эти и другие данные сначала сохраняются в переменных, а затем записываются в переменные сессии, как

$_SESSION['username'] = $name; 
$_SESSION['usertype'] = $type; 

Успешное состояние Войти сохраняется так:

$_SESSION['login'] = "ok"; 

На других страницах я проверить состояние входа в систему, как это:

session_start(); 
if(($_SESSION['login'] != "ok") OR ($_SESSION['usertype'] != "xxx")) { 
header("Location: ../login.php"); /* redirects to login page if conditions are not true */ 
exit; 
} 

Логина работы, и вошедшие пользователи могут перейти на другие страницы, пока это сделать более или менее постоянной последовательности, но , если кто-то ждет несколько минут перед процедурой (т. без какой-либо активности), он/она вышел из системы (т. е. перенаправляется на страницу входа при попытке открыть другую страницу).

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

Любая помощь будет очень высоко ценится.


ОБНОВЛЕНИЕ:

Добавление ini_set('session.gc_maxlifetime', 3600'); и `ini_set ('session.cookie_lifetime', 3600); не помогло. Я снова удалил его.

После этого я заглянула в журналах ошибок и нашел это:

ap_pass_brigade завершилась с ошибкой 103: Программное обеспечение вызвало подключение прервать

(проблема, у меня нет доступ к настройкам сервера - это на общем веб-пространстве ...)

+0

Если вы установили новый PHP, а затем проверить 'php.ini' файл. Сеанс сеанса по умолчанию, вероятно, по умолчанию, когда ваша старая система увеличила бы его до более крупного времени. – RiggsFolly

ответ

1

Вы можете увидеть конфигурацию php (php.ini) по phpinfo();

<?php 
phpinfo(); 

Сначала проверьте значения session.gc_maxlifetime, затем, если вам необходимо установить его, выполните следующие действия.

Вы можете установить его с файлом .htaccess, если у вас нет прав на редактирование файла php.ini.

.Htaccess

<IfModule mod_php5.c> 
    php_value session.cookie_lifetime 3600 
    php_value session.gc_maxlifetime 3600 
</IfModule> 

Даже вы можете установить его ini_set();

<?php 
    ini_set('session.gc_maxlifetime', 3600); 
+0

. См. Этот ответ: http://stackoverflow.com/questions/3476538/php-sessions-timing-out-too- быстро –

+0

вы должны использовать значения сеанса по умолчанию в php.ini. также попробуйте очистить файлы cookie браузера и проверить наличие ошибок в файле журнала ошибок для веб-сайта. вы также можете проверить, имеет ли папка, в которой хранятся данные сеанса, правильные разрешения –

0

Для тех, кто интересуется: Сессия фактически не истекают, а переменные сеанса исчезли (и вновь опять случайно).

Это обсуждается в вопросе последующих я разместил здесь:

php $_SESSION variables disappear and reappear randomly