2016-12-29 4 views
0

Я нахожусь в этом разделе. У меня есть приложение, в котором используется 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.

+0

Спасибо, Ryan. Наша работа основана на Scrum, и для меня это звучит как новая функция. Я мог бы предложить его, но в то же время идея состоит в том, чтобы просто продлить сеанс до X часов или, скорее, дневной смены пользователей. Однако я принял к сведению ваше предложение. – Maximum86

ответ

1

У вас есть как gc-maxlifetime, так и cache_expire сеансовая конфигурация, которую вы можете использовать, чтобы повлиять на это поведение.

Не используйте функцию setcookie для этого.

+0

Спасибо, я сделаю некоторые поисковые запросы и посмотрю, не решена ли моя проблема. – Maximum86

+0

Я обновил свой вопрос с вашим предложением, и, похоже, меня не выгнали после того, как я определил, что было 10 минут и уменьшено до 5 только для целей тестирования. Разве я могу рассказать мне об этом больше? Как лучше всего использовать gc-maxlifetime и cache_expire? – Maximum86

+0

На какой ОС вы запускаете это приложение? Некоторые Linux-серверы отключают возможность использования 'session.gc_maxlifetime' и очистки с помощью cronjob. – Dekel

Смежные вопросы