ruby-on-rails - Rails ActiveRecord session 存储在 HTML5 SessionStorage 而不是 Cookie 中

标签 ruby-on-rails html session activerecord session-storage

我的应用程序要求用户在其浏览器的不同选项卡中登录不同的帐户(我们专门针对 Chrome)。因为 Rails 使用 cookie 来存储 session 信息,所以当用户登录时,他们会在浏览器的所有选项卡上登录。我正在使用 ActiveRecord session 存储方法,但即使 session 的 ID 也保存为 cookie。

似乎有一个使用 HTML5 的 sessionStorage 机制的解决方案,它的范围仅限于用户登录的选项卡或窗口。看来我所要做的就是指示 Rails 将 session 信息保存到 sessionStorage 而不是 cookie 中。但是我根本找不到这方面的信息。

假设没有办法在 Rails 中配置 session 存储来执行此操作,是否可以覆盖 ActiveRecord session 保存机制?关于在何处查找有关如何解决此问题的信息的任何指示?

最佳答案

与 cookie 不同,sessionStorage 条目不能使用响应 header 创建,并且不会自动包含在请求 header 中。这给在客户端 Javascript 上管理基于 sessionStorage/localStorage 的身份验证带来了很多工作量。所有经过身份验证的访问都必须通过明确包含身份验证 token 的 Javascript XHR 请求。

如果您希望用户能够有多个并发 session ,并且您不想将您的站点构建为 SPA ,那么您将不得不对 cookie 采取替代方法。

一种方法是使用多个域强制将 cookie 放入单独的子空间。设置通配符 DNS 记录并将您的 Web 服务器配置为接受所有匹配的请求,而不考虑前缀。例如,用户可能默认位于 www.yoursite.com。您将提供一个“创建新 session ”链接,该链接会打开一个指向随机子域的新选项卡,例如1234abcd.www.yoursite.com。但是,如果您使用 SSL,这可能会产生问题;通配符 SSL 证书往往要贵得多。

一种更简单的方法是让用户了解他们浏览器的隐私/隐身模式,这些模式维护独立的 cookie 存储。然而,让用户阅读文档始终是一个挑战。

关于ruby-on-rails - Rails ActiveRecord session 存储在 HTML5 SessionStorage 而不是 Cookie 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18316752/

相关文章:

javascript - 使用jquery将span变成输入框

web-services - Wicket Session 和 Jersey REST Web 服务

ruby-on-rails - 具有单一 Controller 名称的 Rails 路径助手

sql - 获取所有已标记为属于用户的任何兴趣的帖子

html - 在新标签页中打开 PDF - Blazor

php - Laravel 5 session 生命周期

ruby-on-rails - 如何在不登录的情况下将 "Like"功能添加到我的博客文章中

ruby-on-rails - 参数错误 : odd number of arguments for Hash when trying to connect to redis

javascript - Ruby on rails onError 方法中的事件源直播

html - CSS/Bootstrap 无法正确设置样式