【问题标题】:Subdomain cookie sharing in Rails 3 is not working (on Heroku)?Rails 3 中的子域 cookie 共享不起作用(在 Heroku 上)?
【发布时间】:2011-08-03 13:14:15
【问题描述】:

我正在尝试让我的网站 dapshare.com 上的 cookie 同时适用于根地址和“www”子域。

许多其他 stackoverflow 答案(以及关于此主题的出色 Railscasts 视频)建议将此行添加到 session_store.rb:

Dapshare::Application.config.session_store :cookie_store, :key => '_dapshare_session', :domain => :all

这似乎没有什么区别:如果我登录 dapshare.com,我仍然没有登录 www.dapshare.com。

我在这里做错了吗?我正在使用以下代码在 cookie 中存储信息:

cookies.permanent.signed[:thing_to_store] = store_information

感谢您的帮助!

【问题讨论】:

  • 您应该可以在浏览器设置中查看 cookie,其中domain 属性设置为什么?
  • 有趣。刚刚登录 www.dapshare.com。它在“remember_token”为 www.dapshare.com 创建,但为 dapshare.com 创建了一个“_dapshare_session”。这是否意味着我上面使用的代码(cookies.permanent...)没有获取 session_store 域?
  • (顺便说一句,remember_token 是我用来存储登录用户身份的)

标签: ruby-on-rails session cookies heroku subdomain


【解决方案1】:

我在传递 :all 时遇到了这个问题,似乎无法正常工作。如果您只想用于子域,请尝试以下操作:

Dapshare::Application.config.session_store :cookie_store, :key => '_dapshare_session', :domain => '.dapshare.com'

【讨论】:

  • 谢谢 dombesz - 我试过了,实际上没有运气。 _dapshare_session cookie 将保存在 dapshare.com,但我用来存储 cookie 的代码(见问题)一直保存到 www.dapshare.com。我现在通过在设置 cookie 时明确说明域来解决问题。
【解决方案2】:

简短回答:使用 'cookies[:new_cookie] =' 似乎不会从 session_store 配置设置中获取域。

我将 :domain 添加到新的 cookie 中,它现在可以工作了:

cookies.permanent.signed[:new_cookie] = {:value => new_value, :domain => ".dapshare.com"}

其他人阅读,删除cookie时还需要指定域

cookies.delete :new_cookie, :domain => ".dapshare.com"

(感谢您帮助诊断 Andrew Marshall。)

【讨论】:

  • 如果我希望我的所有 cookie 都使用此默认值怎么办?没有配置只是..为你做这个? :(
  • 不是我发现的 - 我仍然使用我的答案中列出的方法。不过,如果你有什么想法,请告诉我!
【解决方案3】:

您实际上可以使用 domain => :all 而不是 domain => '.dapshare.com' 在 Rails 3.1 + 中指定您的 cookie:

cookies.permanent.signed[:new_cookie] = {:value => new_value, :domain => :all}

这比直接指定字符串域更灵活。现在您的应用程序不会在不同的生产域中中断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 2012-05-11
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多