2016-06-25 20 views
1

Я создаю скрипт для входа в систему, и когда пользователь войдет в систему, он сможет оставаться за 3 часа до того, как он выйдет из системы.php login session timeout error

Ниже в моем login.php

  .... 
      $_SESSION['dgUserLoggedIn'] = true; 
      $_SESSION['timeout'] = time(); 
      .... 

Логин-check.php, который находится в верхней части каждой страницы, которая требует аутентификации:

function isLoginSessionExpired() { 
    $login_session_duration = 10800; 
    $current_time = time(); 
    if(isset($_SESSION['timeout']) and isset($_SESSION['dgUserLoggedIn'])){ 
     if(((time() - $_SESSION['timeout']) > $login_session_duration)){ 
      session_regenerate_id(true); // change session ID for the current session and invalidate old session ID 
      $_SESSION['timeout'] = time(); // update creation time 
      return true; 
     } 
    } 
    return false; 
} 
if(isset($_SESSION["dgUserLoggedIn"])) { 
    if(isLoginSessionExpired()) { 
     header("Location: /core/logout.php"); 
    } 
} 

С выше коде пользователя автоматически выходит из системы через около 30 минут, как я могу убедиться, что пользователь может оставаться в системе в течение 3 часов, а обновление каждой страницы или посещение обновлений времени.

Ниже мой сеанс setup.php

// **PREVENTING SESSION HIJACKING** 
// Prevents javascript XSS attacks aimed to steal the session ID 
ini_set('session.cookie_httponly', 1); 

// Adds entropy into the randomization of the session ID, as PHP's random number 
// generator has some known flaws 
ini_set('session.entropy_file', '/dev/urandom'); 

// Uses a strong hash 
ini_set('session.hash_function', 'whirlpool'); 

// **PREVENTING SESSION FIXATION** 
// Session ID cannot be passed through URLs 
ini_set('session.use_only_cookies', 1); 

// server should keep session data for AT LEAST 1 hour 
ini_set('session.gc_maxlifetime', 3600); 

// each client should remember their session id for EXACTLY 1 hour 
session_set_cookie_params(3600); 

// Uses a secure connection (HTTPS) if possible 
ini_set('session.cookie_secure', 1); 

session_start(); 
+0

попробуйте изменить 'если (((время() - $ _SESSION ['timeout'])> $ login_session_duration)) {'с меньшим оператором. \ – Manish

ответ

1

Вы также можете попробовать изменить значение во время выполнения с помощью ini_set:

ini_set('session.gc_maxlifetime', '10800'); 

или

Вы можете изменить эту строку в файле php.ini.

session.gc_maxlifetime = 1440 

Update: это представляется возможным, поэтому я исправлюсь

строку php_value

session.gc_maxlifetime = 10800 

я надеюсь, что это будет полезно

0

Вы проверили значение session.gc_maxlifetime в файле php.ini? Я думаю, это то, что вызывает проблему.

+0

Я поставил свой session-setup.php @Atif – adams

+1

Можете ли вы проверить значения session.gc_divisor an d session.gc_probability. Взгляните на http://stackoverflow.com/questions/3428153/php-ini-setsession-gc-maxlifetime-5-why-it-doesnt-end-the-session – Atif

0

сначала проверьте настройку времени ожидания сеанса по умолчанию на своем сервере и добавьте следующую строку в свой код. я надеюсь, что он будет работать для вас

session_set_cookie_params(10800);