Я нахожусь в этом разделе. У меня есть приложение, в котором используется Google OAuth, и требование заключается в увеличении времени, в течение которого пользователь остается в системе.Увеличить сеанс LOGIN с PHP
В начале скрипта, который вызывается передним контроллером (index.php), есть инструкция if, которая проверяет наличие глобальной переменной $ _SESSION.
if(!isset($_SESSION)) @session_start();
Все это нормально, поскольку я могу видеть данные сеанса для зарегистрированного пользователя. Теперь я точно не знаю, как справиться с этим, учитывая, что данные токена google, сохраненные в сеансе, также имеют ключ expires_in
со значением 3299 (час).
Мой анализ состоит в том, что через час сеанс отключается от google и для управления этим, чтобы он был расширен, я должен посмотреть обновление кода, который проходит проверку подлинности до google, чтобы обновить токен в автономном режиме. Я не совсем уверен в этой причине, потому что я всегда мог бы контролировать время сеансов в моем приложении по крайней мере - проблема, с которой я сталкиваюсь, - это как часть. ,
Ниже приведен фрагмент кода, я написал чуть выше @session_start вызова:
if(isset($_SESSION)){
$sessionKeys = array(key1, key2,key3); //Keys that are destroyed on logout
$refreshLifetime = false;
foreach($sessionKeys as $key){
if(!empty($_SESSION[$key]){
$refreshLifetime = true;
}
}
if($refreshLifetime){
@setcookie(session_name(), session_id(), time() * 3600);
}
}
Что-то не прав насчет этого кода для всех сложностей обработки сессий с PHP не может быть вместе с тем, как различными операционными системы обрабатывают сеансы на PHP, добавляя к этой стороне клиента и обработку сеанса на стороне сервера.
Может кто-нибудь помочь мне с идеей, что я могу решить эту проблему, так что приложение может иметь расширенный сеанс, говорят за 5 часов до истечения времени?
EDIT
Я решил перенести сессию приложения путь для сохранения из /var/lib/php5
в директорию внутри самого приложения. Я начал с установки session.gc_maxlifetime
до 10 минут, чтобы узнать, будет ли я заблокирован или скорее перенаправлен на страницу входа, но я не уверен.
Я добавил настройку cache_expire
, хотя я был неуверен после прочтения enter link description here, и первое примечание пользователя, внесенное в него, похоже, не связывает использование кеширования с gc_lifetime.
Если бы я должен был установить это, должен ли он быть тем же, что и для сеанса.gc_maxlifetime?
ini_set('session.save_path', __DIR__ .'/../tmp');
ini_set('session.gc_maxlifetime', 300);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
session_cache_limiter('private');
session_cache_expire(300);
Однако это не работает, как я ожидал, чтобы быть перенаправлены обратно на страницу входа в систему после 5 минут бездействия в приложении. Может быть, что-то мне не хватает, и этот код находится прямо в верхней части файла, где вызывается session_start
.
Спасибо, Ryan. Наша работа основана на Scrum, и для меня это звучит как новая функция. Я мог бы предложить его, но в то же время идея состоит в том, чтобы просто продлить сеанс до X часов или, скорее, дневной смены пользователей. Однако я принял к сведению ваше предложение. – Maximum86