从视图中设置cookie,然后从Rails中的Controller读取它

时间:2013-02-26 21:16:45

标签: javascript ruby-on-rails cookies

我想使用Javascript在Rails视图中设置cookie值,然后使用Controller来读取此cookie。这可能与Rails有关,我应该怎么做呢?

我的情况:我有一个输入字段(比如地址),当用户第一次访问我的网站时,需要填写该输入字段。然后,用户使用Omniauth登录。我想在他登录之前坚持地址。

更新: 我能够在客户端添加到document.cookies。但是,cookies [“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>>>

3 个答案:

答案 0 :(得分:10)

要在javascript中设置Cookie,您可以执行以下操作:

document.cookie="something= test";

所以你可以添加一个事件(click,submit,..)来从输入中获取值,并按照我上面提到的方式创建一个cookie。

在rails中,您可以读取如下值:

cookies["something"]

如果需要,您还可以指定Cookie在javascript中过期的时间。

答案 1 :(得分:1)

简答

  1. 安装MDN JavaScript Cookie Framework

  2. 在您的js文件中:

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

    cookies[:my_cookie]
    
  4. 答案不是那么简短

    Rails ActionDispatch::Cookies默认Cookie路径指向应用程序的,而plain JavaScript默认为当前路径

    这意味着如果你没有申报这条路径,你最终会得到两个不同的名字并且头疼的饼干。

    要对此进行问题排查,您可以使用Chrome DevTools窗口中的“应用程序/ Cookie”,这样您就可以查看每个Cookie的所有详细信息,并在您通过“控制台”面板进行修改时重新加载其值。

答案 2 :(得分:0)

这可以解释您的问题。显然你需要确保cookie的路径排成一行。

How can i read cookies in rails that have been set by jquery