如何在 Symfony 中延长会话 cookie 的生命周期?
Posted
技术标签:
【中文标题】如何在 Symfony 中延长会话 cookie 的生命周期?【英文标题】:How to extend session cookie lifetime in Symfony? 【发布时间】:2017-07-23 17:56:27 【问题描述】:在服务器端访问会话数据时,其modified_time
被设置,因此将其过期时间延长到未来。
但是,phpSESSID
cookie 不会发生这种情况。虽然服务器端的会话数据过期时间延长了,但 cookie 过期时间没有延长。如果 cookie 过期,用户将失去他的会话 - 他在发送请求时将没有会话 ID。
有没有办法告诉Symfony\Component\HttpFoundation\Session\Session
延长cookie 的有效期?
我找到了$request->getSession()->getMetadataBag()
并尝试设置stampNew()
,但这似乎与PHPSESSID
cookie 没有交互。
【问题讨论】:
我认为 PHPSESSID cookie 被设置为会话 cookie,这意味着浏览器在关闭时会清理它。从来没有听说过在浏览器会话完成之前清理它。 我不需要删除它,我需要延长它的有效期。它不会在关闭浏览器时被清除 - cookie 的寿命会更长(我猜有点像 REMEMBERME) 我的意思是(基于the manual,会话的默认持续时间是“只要浏览器打开”)。现在,如果浏览器不清理会话 cookie 并将它们保留更长时间(通常是这种情况),则不是基于默认的 PHP 配置。无论如何,PHP 会话并不意味着在浏览器会话之后持续存在,也许您可以使用不同的会话管理器和您自己的自定义 sessionid cookie 来使会话持续更长时间。 【参考方案1】:您可以在会话密钥下的config.yml文件中进行更改,例如:
# session configuration
session:
cookie_lifetime: 3600
来自文档:
cookie_lifetime
类型:整数默认值:null
这决定了会话的生命周期 - 以秒为单位。默认 value - null - 表示 session.cookie_lifetime 值来自 将使用 php.ini。将此值设置为 0 意味着 cookie 是 在浏览器会话的长度内有效。
更多信息在文档here
【讨论】:
我知道这个设置,我需要知道的是如何在每次页面访问时“碰撞”cookie过期时间,因为服务器上会话数据的过期时间是“碰撞”的“在每一个请求上。同样只要继续访问该站点,您的会话应该在定义的生命周期内保持活动状态,即使在您关闭浏览器(然后重新打开)之后也是如此。只有当您在lifetime
秒内没有访问该站点时,它才会死掉。以上是关于如何在 Symfony 中延长会话 cookie 的生命周期?的主要内容,如果未能解决你的问题,请参考以下文章