2

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

谢谢。

4

3 回答 3

3

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

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

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

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

有关文档,请参见此处

于 2009-12-19T05:35:40.350 回答
2

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

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

有一些方法可以实现真正的跨域 cookie - 但它们相当复杂。

于 2009-12-19T05:45:40.427 回答
0

您可能想查看http://coderack.org/users/ahmid/middlewares/142-session-injector

于 2011-04-04T21:06:42.537 回答