使用域选项在rails中设置cookie

时间:2009-12-19 05:31:12

标签: ruby-on-rails heroku

我正在尝试在一个域中设置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选项会允许这样做。

感谢。

3 个答案:

答案 0 :(得分:3)

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

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

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

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

请参阅here了解文档。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)