如何正确管理PHP会话Cookie的到期时间?

时间:2018-12-06 11:43:21

标签: php session cookies session-cookies

PHP网站使用cookie在浏览器端存储会话ID。目标是在最新用户与网站互动后的特定时间内,PHP会话将被视为有效。

PHP会话有两个不同的超时:

  • cookie过期-当浏览器忘记包含会话ID的cookie
  • 会话到期-服务器忘记会话数据时

PHP内置逻辑仅在第一次调用session_start()时才发送cookie。 e。会话ID已生成。 Cookie不会在进一步的请求中发送,因此cookie过期时间永远不会延长。

与此相反,每个请求的PHP会话有效期都会延长。

因此,如果用户持续与站点交互,则PHP会话的有效期将延长,但cookie的有效期将保持其原始值。

示例:

  • PHP会话和cookie寿命设置为5个时间点
  • 用户在第1、2和4点与网站互动

时间点/ PHP会话到期/ cookie到期

1/6/6

2/7/6

4/9/6

  • 如果确定在时间点7与站点交互,则cookie已过期,因此不会将其发送到服务器。这样,即使PHP会话在技术上是有效的,请求的行为也将类似于PHP会话已过期。

如何强制PHP在每个(或几乎每个)请求上更新cookie的过期时间? 最佳做法是什么?

我没有在网络上找到任何有用的东西,也没有找到任何可行的解决方法。例如,我发现了以下建议:

  • 最初将cookie的寿命设置得更长一些-只是推迟了cookie的神奇消失,并且基本上没有对总体目标有所贡献(请考虑在最近的用户互动之后会话有效)。
  • 在每个请求上重新生成会话ID,从而触发发送新的cookie-感觉有些攻击性,并可能导致并发副作用(并发请求可能不是来自于已序列化的浏览器,而是并行的)
  • 手动管理cookie-这需要模仿PHP的逻辑(并使自定义实现与内置逻辑兼容),以确保在每个请求上都发送回具有过期期限的新cookie

注意:此问题中的会话表示由PHP(而不是浏览器)管理的会话。 Cookie的到期时间应独立于浏览器会话。因此,建议Is possible to keep session even after the browser is closed?根本不相关。

编辑:该问题已归类为PHP bug

0 个答案:

没有答案
相关问题