PHP 会话 ID - SID 的有效期是多久? [复制]

Posted

技术标签:

【中文标题】PHP 会话 ID - SID 的有效期是多久? [复制]【英文标题】:PHP Session ID - how long is a SID valid? [duplicate] 【发布时间】:2013-03-30 07:03:20 【问题描述】:

理论上,如果 php 会话 ID 存储在 cookie 中,其生命周期为 365 天,该会话 ID 是否会在第 365 天恢复正确的会话数据,或者相关会话数据是否会因会话而超时/删除生命周期设置?

我可以/应该存储和使用会话 ID 多长时间?

【问题讨论】:

直到浏览器关闭为止,除非您在会话中使用 cookie 见***.com/a/1270960/1163444 Cookie 生命周期(客户端)与会话生命周期(服务器端)不同。 【参考方案1】:

理论上,您可以根据需要存储它,但您将不必要地消耗资源。默认为 20 分钟,可以通过设置session.gc_maxlifetime 参数在php.ini 中进行调整。如果您需要将数据保留更长的时间,则将其放入数据库而不是会话中是有意义的。

【讨论】:

【参考方案2】:

理论上,如果 PHP Session ID 存储在 Cookie 中,其生命周期为 365 天,那么 Session ID 是否会在第 365 天恢复正确的会话,或者相关 Session 是否会由于 Session 生命周期设置而超时?

cookie 仅存储将识别会话的会话 ID。

如果存在与该 id 对应的会话文件,则会话将恢复 - 否则,将创建具有该 id 的新空会话。

session.gc_maxlifetime 选项命名错误——事实上它是一个最小生命周期。如果在最后一次访问会话文件之后已经过了这个时间跨度,则 允许 会话垃圾收集器从磁盘上擦除该文件 - 但不能保证这会立即发生,因为垃圾收集器是随机调用的(也可以配置每个请求的概率)。

我可以/应该存储和使用会话 ID 多长时间?

只要你需要……?

这取决于您要做什么、如何配置会话等。

【讨论】:

【参考方案3】:

会话 ID 的最后一个与 session.gc_maxlifetime 相同。检查php.iniphpinfo() 以查看您的设置,默认为1440 秒(24 分钟)。虽然如果您关闭浏览器并且不通过 cookie 或其他方式恢复会话 ID,则会话仍然关闭。

【讨论】:

以上是关于PHP 会话 ID - SID 的有效期是多久? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

php中的session_id详解

php中session_id()函数详细介绍,会话id生成过程及session id长度

面试问题汇总

如何迅速杀掉数据库里inactive的会话

如何在 MySQL 中使用排他锁?

PHP存储会话数据,在会话中存储用户ID