Rails 4:会话值从不"到期"或者在浏览器关闭时死亡

时间:2013-12-08 03:44:23

标签: security authentication ruby-on-rails-4 session-cookies

请参阅问题末尾的更新

在Rails 4中,我理解默认情况下,会话只应存在于浏览会话中。如果您关闭浏览器,会话应该不再存在。

但是,我发现情况并非如此。我有一个使用Rails提供的所有默认值的Rails 4应用程序。我正在研究一些身份验证代码并遇到了这个问题。

当用户登录系统时,他们可以选择通过复选框“记住我”。当他们选中此框时,会话应该有2周的到期时间。目标是当用户登录系统并关闭浏览器时,他可以再次打开浏览器并使用该应用程序而无需再次进行身份验证。

另一方面,如果用户不想检查“记住我”框并登录应用程序并关闭浏览器,则当浏览器再次打开时,应该要求用户再次进行身份验证,因为他的会话“在浏览器关闭时过期。

问题是我的会话永远不会消失。我测试了一些简单的代码,在第1页,我在控制器中设置了一个会话变量,然后在第2页,我显示了该会话。当我关闭浏览器并转到第2页(不是第1页,因此未重新设置会话)时,会话仍然像以前一样存在。

我认为默认情况下浏览器关闭时会话应该会过期?我也尝试用“cookies”而不是会话来获得相同的结果。

简而言之,如何在用户关闭浏览器时获得过期/死亡的会话/ cookie?如果用户不希望所有会话都持续存在对我来说似乎不太安全,并且我不会让我的用户每次关闭浏览器时都删除他们的cookie(可能在公共计算机上他们的登录信息应该只在他们关闭浏览器之前一直存在。)

更新 我想我找到了可能导致问题的原因。我使用Chrome作为浏览器,当浏览器关闭并打开时,我将其设置为“记住我离开的地方”。这似乎可以保存所有会话/ cookie。我也通过Gmail验证了这一点。如果您设置了“记住我离开的位置”,但未在Gmail中设置记住我令牌,则当您关闭/打开浏览器时,Gmail会立即打开。如果您告诉Chrome在打开时打开新标签页,那么Gmail会将您发送到我期望的登录页面。

因此解决了一个问题,但整体问题仍然存在。我怎样才能使这个“安全”?假设您在公共计算机上,并且恶意用户在浏览器打开时将浏览器设置为“记住我离开的位置”。因此,您登录到应用程序(例如Gmail)但不检查“记住我”框。因此,当您关闭浏览器时,您希望您的登录“安全”。但是如果另一个用户打开浏览器,他已经登录了你的应用程序。

这是否可以预防?如果Gmail有这个缺陷(由一群非常聪明的开发人员组成),我是否应该为这种情况感到困扰?

1 个答案:

答案 0 :(得分:3)

浏览器“记住我离开的地方”功能确实是问题所在。删除该选项会导致我的cookie /会话出现“预期”行为。