php登录会话超时错误

时间:2016-06-25 10:25:11

标签: php session session-timeout

我正在创建一个登录脚本,当用户登录时,他可以在系统注销前3小时停留。

以下是我的login.php

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

login-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小时内保持登录状态,每次刷新页面或访问时间更新本身。

以下是我的session-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();

4 个答案:

答案 0 :(得分:1)

您还可以尝试使用ini_set:

在运行时更改值
ini_set('session.gc_maxlifetime', '10800');

您可以在php.ini文件中更改此行。

session.gc_maxlifetime = 1440

更新:似乎有可能,所以我更正了

php_value

session.gc_maxlifetime = 10800

我希望它会有所帮助

答案 1 :(得分:0)

您是否在php.ini文件中检查了session.gc_maxlifetime的值?我想这是导致问题的那个

答案 2 :(得分:0)

会话默认超时为24分钟(1440秒)。 请检查PHP sessions default timeout

答案 3 :(得分:0)

首先检查服务器上的默认会话超时设置,并在代码中添加以下行。我希望它对你有用

$returnTime