【问题标题】:When exactly does a php session expire?php会话究竟什么时候到期?
【发布时间】:2014-05-08 08:23:03
【问题描述】:

我已经在谷歌上搜索过,到目前为止我所知道的是,当浏览器关闭时会话会被​​破坏,如果浏览器只是保持打开状态,会话会在 24 分钟等固定时间后自动过期。

但是这 24 分钟的计数器什么时候开始?服务器何时执行session_start() 行?这个问题可能有点长,但请多多包涵。假设我有一个包含以下代码的 php 页面:

<?php
      session_start();
?>

如果用户打开此页面并仅保持打开大约一个小时,那么尽管页面仍处于打开状态,会话是否仍会过期?如果我在网站每个页面的开头添加session_start()code,每次用户打开网站的新页面时,计数器是否会重置为零?

基本上,我想创建一个登录系统,当用户关闭站点或单击注销按钮时将其注销,并且只要他打开站点,我就希望他保持登录状态,而不会自动注销24 分钟或任何其他固定时间后。

【问题讨论】:

  • 您可以更改会话超时:stackoverflow.com/questions/8311320/…
  • 如果用户只需要保持页面打开,您将需要执行轮询服务器以保持会话处于活动状态。如果用户确实执行了某种类型的操作,您可以简单地在您的一个 PHP 页面上重置他们的计数器。

标签: php session login


【解决方案1】:

从首次创建会话时开始计时。 24 分钟后,垃圾收集器可能会或可能不会在它随机启动时擦除它(参见 session.gc_* 指令)。 您要做的是每 N 分钟重新生成一次会话(session_regenerate_id()),这样只要用户处于活动状态,它就不会过期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 2014-09-09
    • 2017-12-11
    • 2023-02-25
    • 2023-03-24
    • 2015-10-12
    • 2019-12-31
    • 2020-10-30
    相关资源
    最近更新 更多