我正在尝试在一个域中设置cookie并从另一个域访问它。这可能吗?
以下是我在我的应用中所做的事情:
在控制器中,通过此URL访问测试操作:
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选项会允许这样做。
感谢。
答案 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)