【问题标题】:PHP: Reset session lifetime on reloadPHP:重新加载时重置会话生命周期
【发布时间】:2016-03-19 01:47:05
【问题描述】:

这可能是一个相当简单的问题。我发现了几十个类似的,询问如何在 PHP 中普遍缩短或延长会话寿命。我知道如何实现,我的 PHP 脚本如下所示:

ini_set('session.gc_maxlifetime', 3600);
session_set_cookie_params(3600);
session_start();

这会将我的会话设置为在 3600 秒后超时。这基本上就是发生的情况,当我最初打开一个必须登录的网站时,我可以使用它整整一个小时,然后所有会话数据都被删除,我需要再次登录。

但是,这不是我所期望的行为。我希望我的会话在不活动一小时后超时。所以当我第一次在上午 10:00 打开我的网站时,做一些事情直到 10:45,然后它应该在 11:45 超时,而不是像现在这样在 11:00。

有什么建议可以实现吗?

【问题讨论】:

  • 你也需要使用会话来完成这个任务。您可以在模板中的页面加载时更新 cookie。如果最后的页面加载时间早于 3600 秒,您将销毁会话。但正如您所见,它有其缺点(需要每次都执行)

标签: php session session-timeout


【解决方案1】:

使用而不是session_set_cookie_params -> setcookie

改为

session_set_cookie_params(3600);
session_start();

使用它并在您网站的每个页面上调用它

$lifetime=3600;
session_start();
setcookie(session_name(),session_id(),time()+$lifetime);

它将在每次执行时更新会话 cookie 到期日期,直到 time()+$lifetime 日期

【讨论】:

    【解决方案2】:
    $lifetime=3600;
    session_start();
    setcookie(session_name(),session_id(),time()+$lifetime);
    

    使用此代码发送了两个具有相同名称的 cookie,并且似乎不适合使用。

    如果您不想两次发送同名的会话 cookie,您可以以最简洁的方式使用此代码。

    $sessionId = $_COOKIE[session_name()] ?? null;
    if($sessionId){ session_id($sessionId); }
    session_start(['cookie_lifetime' => 3600]);
    

    会话持续时间为每个请求更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 2012-03-28
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      相关资源
      最近更新 更多