【问题标题】:Setting cookies in rails with domain option使用域选项在 Rails 中设置 cookie
【发布时间】:2009-12-19 05:31:11
【问题描述】:

我正在尝试在一个域中设置一个 cookie 并从另一个域访问它。这可能吗?

这是我在我的应用程序中所做的:

在控制器中,通过此 url 访问测试操作:

http://myapp.com/account/test

def test
  cookies[:foo] = {
    :value => 'something',
    :domain => 'myapp.heroku.com'
  }
end

在同一个控制器中,通过这个 url 访问 test2 动作:

http://myapp.heroku.com/account/test2

def test2 
  puts "foo=#{cookies[:foo]}"
end

但是 cookies[:foo] 的值总是空的。是否可以从 heroku.com 域访问 cookie。我认为设置 :domain 选项会允许这样做。

谢谢。

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    您不能对其他域执行此操作,但您可以对子域执行此操作。所以,例如, 在域example.com 上运行的应用程序可以为subdomain.example.com 设置cookie,但不能为exampleapp.com 设置cookie。

    我必须补充一点,如果可以为其他任意域设置 cookie,将会存在大量安全/隐私问题。

    您可以通过在 environment.rb 中执行以下操作为所有域设置相同的 cookie:

     ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS[:session_domain => '.mydomain.com']
    

    有关文档,请参阅 here

    【讨论】:

    • 另外,有些浏览器(或插件)可能不允许您的应用执行此操作……但我不确定。
    【解决方案2】:

    :domain 选项(通常在 cookie 上设置域)仅在子域中有效。即对于 app1.mysite.com 和 app2.mysite.com - 您可以将 cookie 域设置为 .mysite.com 并在子域之间共享。

    这就是 cookie 的设计方式。 myapp.com 和 myapp.heroku.com 是单独的域,而不是子域,因此尝试以这种方式设置域是行不通的。

    有一些方法可以实现真正的跨域 cookie - 但它们是rather involved.

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 2022-09-27
      • 2010-10-15
      • 2017-03-30
      相关资源
      最近更新 更多