从视图中设置cookie,然后从Rails中的Controller读取它
我想使用Javascript在Rails视图中设置cookie值,然后使用Controller来读取此cookie。 这可能与Rails有关,我应该怎么做呢?
我的情况:我有一个输入字段(比如地址),当用户第一次访问我的网站时,需要填写该输入字段。 然后,用户使用Omniauth登录。 我想坚持地址,直到他登录后。
更新:我能够在客户端添加到document.cookies。 但是,cookies [“something”]从Rails结尾返回nil。 以下是cookie哈希:
#"BAh7Ck==--776b2fcfcd63d3c84d2b1de5327e277499add6d4", "fbsr_1505068851081"=>"mqZeyvoRC"}, @signed=#<ActionDispatch::Cookies::SignedCookieJar:0x007 @parent_jar=#, @verifier=#>>
要在javascript中设置cookie,您可以执行以下操作:
document.cookie="something= test";
所以你可以添加一个事件(点击,提交,…)来从输入中获取值,并按照我上面提到的方式创建一个cookie。
在rails中,您可以像这样读取值:
cookies["something"]
如果需要,您还可以指定cookie何时在javascript中过期。
这可以解释你的问题。 显然你需要确保cookie的路径排成一行。
我如何读取由jquery设置的rails中的cookie
简答
-
安装MDN JavaScript Cookie框架
-
在你的js文件上:
docCookies.setItem('my_cookie', 'my_cookie_value', '', '/');
-
在您的rails控制器上:
cookies[:my_cookie]
答案不是那么简短
Rails ActionDispatch :: Cookies默认指向应用程序根目录的cookie路径,而普通JavaScript默认将其指向当前路径 。
这意味着如果你没有声明路径,你最终会得到两个不同的cookie,这些cookie具有相同的名称并且令人头疼。
为了解决这个问题,您可以使用Chrome DevTools窗口中的“应用程序/ Cookie”,这样您就可以查看每个Cookie的所有详细信息,并在您通过“控制台”面板修改它们时重新加载它们的值。