我有一个场景,我不需要在 HTTP 上设置会话,而只需在 HTTPS 页面上设置它。目前的问题是我们在 HTTPS 和 HTTP 之间共享会话字符串。
即,如果您访问我们的 HTTP 页面,您将被分配一个会话字符串(不安全)。当您访问我们的 HTTPS 页面之一时,它使用相同的会话字符串。它们在两者之间共享。我们不希望人们能够通过未加密的连接窥探会话字符串。
有人可以指点我阅读,或者围绕我如何实现这样的目标进行说明吗?即使在哪里看 - 我有点难过。找不到很多
我有一个场景,我不需要在 HTTP 上设置会话,而只需在 HTTPS 页面上设置它。目前的问题是我们在 HTTPS 和 HTTP 之间共享会话字符串。
即,如果您访问我们的 HTTP 页面,您将被分配一个会话字符串(不安全)。当您访问我们的 HTTPS 页面之一时,它使用相同的会话字符串。它们在两者之间共享。我们不希望人们能够通过未加密的连接窥探会话字符串。
有人可以指点我阅读,或者围绕我如何实现这样的目标进行说明吗?即使在哪里看 - 我有点难过。找不到很多
Rails 会话数据默认存储在 cookie 中,听起来您只想使用 SSL cookie 吗?
更新:尝试添加secure: true
你的config/initializers/session_store.rb
文件,即
secure_option = (Rails.env.development? || Rails.env.test?) ? false : true
YourApp::Application.config.session_store :cookie_store, { key: '_xxxx_session', secure: secure_option }
设计在生成 cookie 时应该使用 rails 设置
原始答案
在您的config/initializers/devise.rb
文件中应该有一行看起来像这样
# :secure => true in order to force SSL only cookies.
尝试添加到 config.rememberable_options 并重新启动 rails - 注意:在开发模式下,这不是您想要的,您可能可以这样做
secure_option = (Rails.env.development? || Rails.env.test?) ? false : true
config.rememberable_options = { :secure => secure_option }
也可以看看:
如果您想修改会话 cookie,您将不得不在看守回调中修改它们,请参阅此线程和此博客文章
或者,您可以使用单独的 cookie。RailsCast在这里。