【问题标题】:How to extend session cookie lifetime in Symfony?如何在 Symfony 中延长会话 cookie 的生命周期?
【发布时间】:2017-07-23 17:56:27
【问题描述】:

在服务器端访问会话数据时,其modified_time 被设置,因此将其过期时间延长到未来。

但是,PHPSESSID cookie 不会发生这种情况。虽然服务器端的会话数据过期时间延长了,但 cookie 过期时间没有延长。如果 cookie 过期,用户将失去他的会话 - 他在发送请求时将没有会话 ID。

有没有办法告诉Symfony\Component\HttpFoundation\Session\Session 延长cookie 的有效期?

  • 可以对相同的会话 ID 执行此操作吗?还是我们必须重新生成它(对于许多用户 X 许多请求来说似乎效率低下)?
  • 我是否应该自己手动设置(忽略 OOP 原则)

我找到了$request->getSession()->getMetadataBag() 并尝试设置stampNew(),但这似乎与PHPSESSID cookie 没有交互。

【问题讨论】:

  • 我认为 PHPSESSID cookie 被设置为会话 cookie,这意味着浏览器在关闭时会清理它。从来没有听说过在浏览器会话完成之前清理它。
  • 我不需要删除它,我需要延长它的有效期。它不会在关闭浏览器时被清除 - cookie 的寿命会更长(我猜有点像 REMEMBERME)
  • 我的意思是(基于the manual,会话的默认持续时间是“只要浏览器打开”)。现在,如果浏览器不清理会话 cookie 并将它们保留更长时间(通常是这种情况),则不是基于默认的 PHP 配置。无论如何,PHP 会话并不意味着在浏览器会话之后持续存在,也许您可​​以使用不同的会话管理器和您自己的自定义 sessionid cookie 来使会话持续更长时间。

标签: php session cookies symfony


【解决方案1】:

您可以在会话密钥下的config.yml文件中进行更改,例如:

# session configuration
session:
    cookie_lifetime:    3600

来自文档:

cookie_lifetime

类型:整数默认值:null

这决定了会话的生命周期 - 以秒为单位。默认 value - null - 表示 session.cookie_lifetime 值来自 将使用 php.ini。将此值设置为 0 意味着 cookie 是 在浏览器会话的长度内有效。

更多信息在文档here

【讨论】:

  • 我知道这个设置,我需要知道的是如何在每次页面访问时“碰撞”cookie过期时间,因为服务器上会话数据的过期时间是“碰撞”的“在每一个请求上。同样只要继续访问该站点,您的会话应该在定义的生命周期内保持活动状态,即使在您关闭浏览器(然后重新打开)之后也是如此。只有当您在lifetime 秒内没有访问该站点时,它才会死掉。
猜你喜欢
  • 2021-03-03
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 2020-06-09
  • 2011-04-25
  • 1970-01-01
相关资源
最近更新 更多