在一段时间后重新生成会话并在一定时间后将其销毁

时间:2012-01-25 14:21:17

标签: php session

我已经搜索了一种检查会话是否已启动的方法以及自启动以来已经过了多长时间,并且如果每次传递半小时,则重新生成id,如果超过一小时则将其销毁。

我在堆栈上找到了这段代码:

//Start the session
session_start();

// Check if the session is started, if not regenerate it each time passes 30 minutes
if (!isset($_SESSION['init'])) {
    $_SESSION['init'] = time();
} elseif (time() - $_SESSION['init'] > 1800) {
    session_regenerate_id(true);
    $_SESSION['init'] = time();
}

//Check if the session was alive for more than one hour, if so kill it
if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > 3600)) {
    session_destroy();
    session_unset();
}
$_SESSION['last_activity'] = time();

但它似乎运行是一些问题,我试图在18秒后销毁它,所以我可以检查它是否正常工作。当我请求受保护的页面超过18秒时,第一次我仍在使用它但第二次重定向,因为我应该是18秒后的第一次,为什么会这样?

我做错了吗?

1 个答案:

答案 0 :(得分:0)

第一次运行页面时,检查是否设置了会话,然后在结束时设置会话变量。你应该把$_SESSION['last_activity'] = time();放在开头。此外,页面不会继续检查会话变量是否过期,因此它只会检查您是否在一个页面上设置变量并在所有要保护的页面上检查/设置它。