Security Rails 4:session value never“;“到期”;或在浏览器关闭时死亡

Security Rails 4:session value never“;“到期”;或在浏览器关闭时死亡,security,authentication,ruby-on-rails-4,session-cookies,Security,Authentication,Ruby On Rails 4,Session Cookies,见问题末尾的更新 在Rails 4中,我理解会话在默认情况下只应该存在于浏览会话中。如果关闭浏览器,会话将不再存在 然而,我发现情况并非如此。我有一个Rails 4应用程序,使用Rails提供的所有默认值。我在编写一些身份验证代码时遇到了这个问题 当用户登录系统时,他们可以通过复选框选择“记住我”。当他们勾选该复选框时,会话的有效期应为2周。目标是当用户登录到系统并关闭浏览器时,他可以再次打开浏览器并使用应用程序,而无需再次验证 另一方面,如果用户不想选中“记住我”框并登录应用程序并关闭浏览器,

见问题末尾的更新

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

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

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

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

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

我以为会话应该在浏览器默认关闭时过期?我也尝试过用“cookies”代替会话,得到了同样的结果

简言之,当用户关闭浏览器时,如何获取过期/失效的会话/cookie?在我看来,如果用户不希望所有会话持续存在,那么让所有会话持续存在似乎不是很安全,而且我不会让我的用户每次关闭浏览器时都删除他们的cookie(可能是在公用计算机上,他们的登录信息只应持续存在,直到他们关闭浏览器)

更新 我想我找到了问题的原因。我使用Chrome作为我的浏览器,当浏览器关闭和打开时,我将它设置为“记住我离开的地方”。这似乎保存了所有会话/cookie。我也用Gmail验证了这一点。如果您设置了“记住我离开的地方”,但没有在Gmail中设置“记住我”标记,那么当您关闭/打开浏览器时,Gmail会自动打开。如果你告诉Chrome在open上打开一个新标签,那么Gmail会像我预期的那样将你发送到登录页面

这解决了一个问题,但总体问题仍然存在。我怎样才能使这个“安全”?假设你在一台公共计算机上,当浏览器打开时,一个恶意用户将浏览器设置为“记住我离开的地方”。因此,你登录到一个应用程序(如Gmail),但不要选中“记住我”框。因此,当您关闭浏览器时,您希望您的登录是“安全的”。但如果其他用户打开浏览器备份,则表示他已登录到您的应用程序


这是我可以预防的吗?如果Gmail有这个缺陷(有一群非常聪明的开发者),我应该为这种情况的存在而烦恼吗?

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

或者在Firefox中,我关闭了选项卡,然后重新启动浏览器。那么会话就丢失了。谢谢你抓到这个!