是否在每个页面加载时重置php会话?

时间:2014-03-13 10:50:00

标签: php session

我正在尝试使用下面的脚本将会话生命周期延长到3天。

 ini_set('session.gc_maxlifetime',3*24*60*60);
 ini_set('session.gc_probability',1);
 ini_set('session.gc_divisor',1);

 $sessionCookieExpireTime = 3*24*60*60;
 session_set_cookie_params($sessionCookieExpireTime);
 session_start();

 // page code

会话生命周期必须保持3天,并且在第3天会话结束时必须到期。我的问题是,

1)每次加载页面时会重置会话吗?

2)我是否会在每次重页加载时将生命周期延长至3天?

如果是,我不想在每次加载页面时延长会话生命周期。它应该首次设置用户访问的页面,它应该在第3天结束。每次页面重新加载时都不应重置会话生存期。

会话必须在会话到期后的第3天结束时重置。直到那时不应该执行重置。

Plz在这个问题上帮助我。提前谢谢。

3 个答案:

答案 0 :(得分:5)

创建一个名为“created”的会话变量,该变量保存创建变量时的时间戳。现在在每个页面上加载,检查是否已过了3天。如果已经过了3天,则取消设置会话变量并销毁会话。

<?php

session_start();

$expiry = 60 * 60 * 24 * 3; // 3 days

if (!isset($_SESSION['created'])) {
    // Session variable 'created' doesn't exist, let's create one for the session
    $_SESSION['created'] = time();
} else if (time() - $_SESSION['created'] > $expiry) {
    // More than 3days has passed since the timestamp in 'created' session variable. Destroy the session.
    // Here you could also unset any other session variables you had. I am unsetting the 'created' variable.
    unset($_SESSION['created']);
    session_destroy();
}

?>

答案 1 :(得分:2)

不,会话不会在每次加载页面时重置,并且自首次创建以来计算将到期。

答案 2 :(得分:-2)

为什么天堂的缘故你想要那个?现在让我们说一些用户在每个工作日(周一至周六)使用你的程序。

所以他可能会在星期一开始使用你的节目,会议是在星期三。星期三,会议将更新至周六。星期六,会议将更新到周二。星期二,会议将在周五,周五至周日更新,然后是booooom - &gt;需要新登录。

此行为是WTF,因为用户无法确定他在一周内的星期六和星期一之间注销的原因,而不是另一个星期一。