【问题标题】:Is session in php reset on every page load?php 中的会话是否会在每次页面加载时重置?
【发布时间】:2014-04-18 01:06:31
【问题描述】:

我正在尝试使用以下脚本将会话生命周期延长至 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 天结束时重置。在此之前不应执行复位。

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

【问题讨论】:

    标签: php session


    【解决方案1】:

    创建一个名为“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();
    }
    
    ?>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        看在老天的份上,你为什么想要那个?现在假设某个用户在每周的每个工作日(周一至周六)都使用您的程序。

        所以他可能会在星期一开始使用你的程序,会议时间是星期三。星期三会话刷新到星期六。周六会刷新到周二。周二会话刷新到周五,周五到周日,然后 booooom -> 需要新的登录。

        这种行为是 WTF,因为用户无法确定为什么他在一个星期的星期六和星期一之间注销,而在另一个星期没有。

        【讨论】:

        • 这个不是用来登录系统的,这个是用来缓存服务器响应数据的,应该每3天重置一次。
        猜你喜欢
        • 2018-01-23
        • 1970-01-01
        • 1970-01-01
        • 2018-07-04
        • 2019-11-07
        • 1970-01-01
        • 1970-01-01
        • 2019-03-22
        • 1970-01-01
        相关资源
        最近更新 更多