2009-12-19 27 views
1

我試圖在一個域中設置一個cookie並從另一個域訪問它。這可能嗎?使用域選項在rails中設置cookie

這是我在我的應用程序正在做:

http://myapp.com/account/test

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

在同一控制人的:

在控制器,測試動作通過這個網址訪問test2動作通過以下網址訪問:

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

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

但cookie [:foo]的值始終爲空。是否有可能從heroku.com域訪問cookie。我認爲設置:域選項將允許這樣做。

謝謝。

回答

1

The:domain選項(並在一般cookie上設置域)只能真正適用於子域。即對於app1.mysite.com和app2.mysite.com - 您可以將cookie域設置爲.mysite.com並讓它在子域之間共享。

這只是如何設計餅乾的工作。 myapp.com和myapp.heroku.com是獨立的域名,而不是子域名,所以試圖以這種方式設置域名是行不通的。

有一些方法,以實現真正的跨域餅乾 - 但他們rather involved.

3

你不能爲不同的域做到這一點,但你可以爲子域做到這一點。因此,例如, 在域example.com上運行的應用可以爲subdomain.example.com設置Cookie,但不能爲exampleapp.com設置Cookie。

我必須補充一點,如果有可能爲其他任意域設置cookie,將會有大量的安全/隱私問題。

您可以通過執行中的environment.rb以下設置爲您所有站點同樣的Cookie:

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

看到here的文檔。

+0

另外,它可能是某些瀏覽器(或插件)不會讓你應用程序做到這一點...但我不知道肯定。 – 2009-12-19 05:41:47