2013-02-26 13 views
2

我想使用Javascript在Rails視圖中設置cookie值,然後使用Controller讀取此cookie。這可能與Rails,我應該怎麼去做呢?從視圖中設置一個cookie,然後從Rails中的Controller中讀取

我的情況:我有一個輸入字段(比如地址),用戶需要在他/她第一次訪問我的網站時填寫。用戶然後使用Omniauth登錄。我想堅持地址,直到他登錄後。

更新: 我能夠添加到客戶端上的document.cookies。但是,Cookie [「something」]從Rails結尾返回nil。下面是Cookie哈希值:

#<ActionDispatch::Cookies::CookieJar:0x007 @secret="f4d518c0b2", @set_cookies={}, @delete_cookies={}, @host="localhost", @secure=false, @closed=false, @cookies={"_myapp_session"=>"BAh7Ck==--776b2fcfcd63d3c84d2b1de5327e277499add6d4", "fbsr_1505068851081"=>"mqZeyvoRC"}, @signed=#<ActionDispatch::Cookies::SignedCookieJar:0x007 @parent_jar=#<ActionDispatch::Cookies::CookieJar:0x007fdf...>, @verifier=#<ActiveSupport::MessageVerifier:0x007fdfa34548d8 @secret="f4d518c0b2e9d8", @digest="SHA1", @serializer=Marshal>>>

回答

9

設置cookie在JavaScript,你可以這樣做:

document.cookie="something= test";

所以,你可以添加事件(點擊,提交..)來獲得來自輸入的值並以我上面提到的方式創建一個cookie。

在Rails可以讀出值是這樣的:

cookies["something"]

您也可以指定在cookie將在JavaScript中,如果你需要到期。

+0

感謝您的回答。我得到了第一部分作品。但是我不能像第二部分所說的那樣得到餅乾[「某物」]。看來這些cookies已經簽名,所以我不能改變它。你知道解決這個問題的方法嗎?再次感謝。 – AdamNYC 2013-02-27 05:37:25

+0

@AdamNYC,你可以試試'cookies.signed [「something」]'? – Kaeros 2013-02-27 16:47:10

+0

我試過cookies.signed [「something」],但它是零。我更新了我的問題中的cookie散列。 – AdamNYC 2013-02-27 17:02:28

0

簡答

  1. 安裝MDN JavaScript Cookie Framework

  2. 在您的js文件:

    docCookies.setItem('my_cookie', 'my_cookie_value', '', '/'); 
    
  3. 在您軌控制器:

    cookies[:my_cookie] 
    

並非如此短答案

滑軌ActionDispatch::Cookies默認cookie路徑到根應用,同時plain JavaScript則默認爲電流路徑

這意味着如果你沒有聲明路徑,你最終會得到兩個不同的cookie,它們有相同的名稱和頭痛。

爲了解決這個問題,您可以在Chrome DevTools窗口中使用「應用程序/ Cookies」,以便您可以查看每個Cookie的所有詳細信息,並在通過「控制檯」面板修改它們時重新載入它們的值。

相關問題