首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器如何判断会话已过期,如何更改过期时间?

服务器如何判断会话已过期,如何更改过期时间?
EN

Stack Overflow用户
提问于 2010-02-25 00:34:50
回答 2查看 4K关注 0票数 2

我知道会话cookie可以被赋予生命周期(session.cookie_lifetime),在生命周期过后,无论用户是否与站点交互,该cookie都会过期。

因此,我假设将其设置为0,以指示它们应该保持活动状态,直到浏览器关闭。

我还认为我理解可以为cookie设置垃圾收集生存期(session.gc_maxlifetime),并且只要用户在两次单击之间没有超过这个时间,那么cookie将保持活动状态。

为了测试这一点,我一直在尝试获取10秒的会话超时。

我试过了:

代码语言:javascript
复制
ini_set('session.gc_maxlifetime',10);

但会话至少在1分钟后不会超时。

这是不是因为我只是告诉垃圾收集器,会话的生命周期是10秒,但实际上我并没有触发垃圾收集器?

如何设置垃圾收集器,还是每次请求会话时都运行垃圾收集器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-25 00:56:58

首先,不要混淆cookie设置(客户端)和垃圾收集(服务器端)。Cookie设置仅影响session_id的过期时间。即使浏览器移除了session_id,会话数据也可能仍然存在于服务器上,相反,当cookie仍被浏览器记住时,服务器可以移除数据。

cookie可以设置为在关闭浏览器时过期或在特定的日期和时间过期(我相信默认选项是第一个,但我必须检查它)。在这两种情况下,如果用户与站点交互,cookie将保持有效,因为每次响应都会更新它。

启动垃圾收集时,会话数据会被删除,但您必须考虑到:

  1. 垃圾收集是随机启动的,由页面请求触发。
  2. 它删除在超过gc_maxlifetime秒内未修改的会话数据。
  3. 默认情况下,会话数据存储在文件中,PHP不跟踪哪个站点拥有哪些文件。这意味着在默认共享位置存储会话会使您失去对会话过期的控制:配置为将会话数据保留最短时间的站点可能会从其他时间较长的站点中删除数据。

总而言之,如果您希望完全控制数据生命周期,则需要将会话数据存储在私有目录中,例如:

代码语言:javascript
复制
session_save_path('/home/foo/sessions');
ini_set('session.gc_maxlifetime', 3*60*60); // 3 hours
ini_set('session.use_only_cookies', TRUE);
session_start();
票数 5
EN

Stack Overflow用户

发布于 2010-02-25 00:47:10

服务器在其INI文件中设置了默认超时,如果不是从脚本中覆盖的话。在apache中,我相信它是从PHP.ini内部设置的。您还需要启用垃圾收集功能,我相信这也是在php.ini中设置的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2327681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档