【问题标题】:symfony 1.4 session without using cookiessymfony 1.4 会话不使用 cookie
【发布时间】:2011-12-27 17:55:12
【问题描述】:

我有一个 Symfony 应用程序,它使用 mysql 数据库来存储会话数据,并使用 SfGuard 插件来管理身份验证。 尽管 symfony 总是将身份验证信息保存在 cookie 中。无论如何我可以禁用cookie并将身份验证信息存储在数据库或内存中吗? 将来我可能需要一种单点登录功能,其中身份验证状态将在不同域中的多个应用程序之间持续存在。这就是为什么我最想消除使用 cookie 的需要。

感谢您的帮助。

【问题讨论】:

  • 在这里查看如何在没有 cookie 的情况下获取会话:stackoverflow.com/questions/3740845/php-session-without-cookies 这是您真正想要的吗?我猜多域不是问题:看看堆栈交换,他们有多个站点,但会话之间仍然存在一些同步。
  • 如果我很好地阅读了那篇文章,我需要在 url 中附加会话 ID。我不想那样做。我想将身份验证信息存储在我的数据库或内存中(例如,$_SESSION['authenticated'] = true。如果我禁用 cookie,我将无法再在我的应用中登录

标签: session symfony1 single-sign-on sfguard cookieless


【解决方案1】:

您似乎不了解会话的工作原理。

发送给 cient 的 cookie 称为会话 id,它对访问者是唯一的。当他从服务器请求一个页面时,cookie 会识别会话表中他的数据所在的行 - 除了 ID 之外,没有任何数据会发送到客户端。

没有该 ID,就无法将请求与会话数据配对,这就是您在禁用 cookie 后无法再登录的原因。 cookie 的替代方法是通过其他方式传递会话 ID,例如在 url 中 - php 可以自动执行此操作,您只需在 php.ini 中启用 use_trans_sid

【讨论】:

【解决方案2】:

是的,您可以将身份验证信息存储在数据库中:参见here 方法。

【讨论】:

  • 我的应用程序中已经有数据库存储会话,但它仍然在身份验证中使用 cookie
  • 确实如此。但我想你会很高兴能参与其中的解决方案。
猜你喜欢
  • 2013-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多