【问题标题】:Cookies being preserved despite app telling them to expire尽管应用程序告诉它们过期,但 Cookie 仍被保留
【发布时间】:2011-07-20 19:26:45
【问题描述】:

虽然问题几乎总是发生在 Internet Explorer 中的用户身上,但在 Firefox 和 Chrome 中也发生过几次。

问题在于用户尝试登录并获得 422 错误或只是被重定向回登录屏幕。我们有一个通配符 cookie,但我们最近将其切换为定位 www(大约 3 个月前),并且之前的 cookie 设置为在会话结束时过期。

我们最近还从 Restful_athentication 切换到 Devise 身份验证,希望它能解决问题,但它似乎没有帮助。但是,我看不出它们是如何相关的,因为它们并没有真正管理 cookie,Rails 可以,它们只是将东西放入 cookie 中。我认为问题可能是restful-auth在奇怪的条件下放入了一些损坏的东西,但显然情况并非如此

更新

在我们切换到 Devise 后,遇到此问题的用户不再收到 422 错误,但现在页面只是刷新,没有任何反应。我还应该提到,当他们输入电子邮件以检索密码时(因为他们认为输入的密码错误),它会返回系统中找不到该电子邮件。

当他们清除 cookie 时,尤其是在 IE 中,他们仍然会遇到同样的问题。我已经让一些用户在 Firefox 中搜索单个 cookie,这已经解决了这个问题。但是,仅仅以正常方式清除 cookie 是行不通的。该问题主要影响 IE7 用户,但似乎遍及整个地图,用户在 Chrome、IE8、Firefox、Safari 和适用于 Ipad 的 Safari 上报告了该问题。

另外,这里是 session_store.rb here 的代码链接,这里的主机在 def ensure_domain 中设置,即here

更新 2

我只是做了一个很小的调整,它改变了它,所以它总是发送一个主机。我尝试在每个浏览器上以各种不同的方式登录,但没有遇到任何问题。我希望这会有所帮助

更新 3(最后更新)

我们尝试了几种不同方法的组合,因此虽然我不确定是什么修复了它,但我最好的猜测是从 4 天到会话结束/浏览器关闭时删除缓存。虽然我对此并不感到兴奋,因为我个人不喜欢每次都必须登录,但我宁愿修复这个问题(而且这个问题直到我们将缓存长度更改为 4 天后才开始出现。)

发送主机是一个错误,实际上让每个人的问题都变得更糟,因为没有人能够登录。另一个奇怪的事情是,当查看创建的 cookie 时,有两个 Session ID cookie,我猜这是导致冲突的原因,尤其是 IE7。一些用户必须清除他们的 cookie 才能仍然登录,但至少在大多数情况下这似乎是有效的。

对于任何有类似问题的人,对不起,我无法提供更多帮助!

【问题讨论】:

  • 你能把你的代码贴出来吗?
  • 这里是 session_store.rb 的代码:pastie.org/private/ao9nylhul1ioqjcmnyal2g,这里的主机是在 def ensure_domain 中设置的,这里是:pastie.org/private/snqidzyiktweex1bfawg
  • 我们的一些用户站点有自定义域,这是上面控制器中使用的代码。
  • 您是否有一些日志将 422 返回给您的用户?
  • 你有没有覆盖控制器 SessionController 从设计?

标签: ruby-on-rails authentication cookies devise


【解决方案1】:

如果 HTTPS cookie 设置为“安全”,则不会通过 HTTP 协议发送出去。就好像它不存在一样。这听起来像是可能会“剥离”您的 cookie。

Cookie 基础知识:如果某些东西值得通过 HTTPS 保护,并且您需要在之后跟踪该信息(即身份验证令牌),最好将其保存在 HTTPS cookie 中,并且仅从 HTTPS 访问它。

这是一个 cookie 安全问题,最好在以下位置进行讨论:Secure cookies and mixed https/http site usage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2014-07-22
    • 2014-03-29
    • 1970-01-01
    • 2021-12-30
    • 2021-10-03
    相关资源
    最近更新 更多