在我的注销操作中,我正在这样做:
reset_session
cookies.delete(:rememberme)
redirect_to root_url
但是会话没有被破坏。
当我检查标头时,发送到我的注销操作的请求清楚地包含会话 ID:
Cookie: hiddenalerts=site_vrfy_124258; __utmz=REMOVED_INFO.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); elpriv=REMOVED_INFO; SESSID=b39a9a89bb6a39ea91b620fe0da392ed; __utma=REMOVED_INFO; __utmc=REMOVED_INFO; __utmb=REMOVED_INFO
但是响应只清除了 rememberme cookie,它不清除会话 cookie:
Set-Cookie: rememberme=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT
如果我在注释掉 rememberme cookie 删除时将其与相同的标题进行比较。请求看起来相同:
Cookie: hiddenalerts=site_vrfy_124258; __utmz=REMOVED_INFO.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); elpriv=REMOVED_INFO; SESSID=b39a9a89bb6a39ea91b620fe0da392ed; __utma=REMOVED_INFO; __utmc=REMOVED_INFO; __utmb=REMOVED_INFO
但是响应看起来更像我所期望的(并且我的会话被正确销毁):
Set-Cookie: SESSID=50640523cf32b5b0fe8c93eb16aba6dc; path=/; HttpOnly
有没有其他人经历过这个?我只能假设会话处理程序和 ApplicationController 对 cookie 的引用不同,因此如果您修改控制器中的 cookie,这会破坏 reset_session 所做的任何事情。我可以通过手动删除会话 cookie 来解决这个问题,但我想先了解发生了什么以及是否有已知的解决方法。
显然,我需要能够在注销过程中清除“记住我”cookie,否则用户将立即重新登录。
编辑 | 作为错误提出的问题。我现在会解决它。https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/6763-deleting-a-cookie-and-calling-reset_session-in-the-same-controller-action-does-not-发送新会话 cookie