我想使用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>>>
答案 0 :(得分:10)
要在javascript中设置Cookie,您可以执行以下操作:
document.cookie="something= test";
所以你可以添加一个事件(click,submit,..)来从输入中获取值,并按照我上面提到的方式创建一个cookie。
在rails中,您可以读取如下值:
cookies["something"]
如果需要,您还可以指定Cookie在javascript中过期的时间。
答案 1 :(得分:1)
简答
在您的js文件中:
docCookies.setItem('my_cookie', 'my_cookie_value', '', '/');
在您的rails控制器上:
cookies[:my_cookie]
答案不是那么简短
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