Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails ActiveRecord会话存储在HTML5会话存储中,而不是Cookie_Ruby On Rails_Html_Session_Activerecord_Session Storage - Fatal编程技术网

Ruby on rails Rails ActiveRecord会话存储在HTML5会话存储中,而不是Cookie

Ruby on rails Rails ActiveRecord会话存储在HTML5会话存储中,而不是Cookie,ruby-on-rails,html,session,activerecord,session-storage,Ruby On Rails,Html,Session,Activerecord,Session Storage,我的应用程序要求用户在浏览器的不同选项卡中登录到不同的帐户(我们专门针对Chrome)。因为Rails使用Cookie存储会话信息,所以当用户登录时,他们会登录到浏览器中的所有选项卡。我使用的是ActiveRecord会话存储方法,但即使会话的ID也保存为cookie 使用HTML5的会话存储机制似乎有一个解决方案,它的范围仅限于用户登录的选项卡或窗口。似乎我所要做的就是直接让Rails将会话信息保存到会话存储中,而不是cookie中。但我根本找不到这方面的信息 假设无法在Rails中配置会话存

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

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


假设无法在Rails中配置会话存储来执行此操作,是否可以覆盖ActiveRecord会话保存机制?关于在何处查找有关如何执行此操作的信息的任何指针?

您现在可以通过初始化器配置基于Cookie的会话存储,可能在config/initializers/session_store.rb中。在Rails 3中,会话存储是一个中间件,配置选项通过对config.session\u存储的单个调用传入:

您的::Application.config.session\u存储:cookie\u存储,:key=>“\u session”

您可以使用:key在散列中添加任何额外选项,例如

Your::Application.config.session_store :cookie_store, {
  :key =>           '_session_id',
  :path =>          '/',
  :domain =>        nil,
  :expire_after =>  nil,
  :secure =>        false,
  :httponly =>      true,
  :cookie_only =>   true
}

与Cookie不同,sessionStorage条目不能使用响应头创建,并且不会自动包含在请求头中。这就为管理基于客户端Javascript的会话存储/本地存储身份验证带来了大量工作负载。所有经过身份验证的访问都必须通过显式包含身份验证令牌的Javascript XHR请求

如果您希望用户能够有多个并发会话,并且您不希望将您的站点构建为一个并发会话,那么您必须采用另一种方法使用cookie

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


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

我在这里配置会话存储并使用ActiveRecord会话存储。我如何将其保存在HTML5会话存储中,而不是保存在cookie中?您找到这个问题的答案了吗?