2

我想使用 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>>>

4

3 回答 3

11

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

document.cookie="something= test";

因此,您可以添加一个事件(单击、提交、..)以从输入中获取值并按照我上面提到的方式创建一个 cookie。

在 Rails 中,您可以像这样读取值:

cookies["something"]

如果需要,您还可以在 javascript 中指定 cookie 何时过期。

于 2013-02-26T21:23:56.170 回答
2

简答

  1. 安装MDN JavaScript Cookie 框架

  2. 在您的 js 文件中:

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

    cookies[:my_cookie]
    

不是那么简短的答案

Rails ActionDispatch::Cookies将 cookie 路径默认为应用程序的根目录,而纯 JavaScript将其默认为当前路径

这意味着如果你不声明路径,你最终会得到两个不同的 cookie,它们具有相同的名称和令人头疼的问题。

为了解决这个问题,您可以使用 Chrome DevTools 窗口上的“应用程序/Cookies”,这样您就可以查看每个 cookie 的所有详细信息,并在通过“控制台”面板修改它们时重新加载它们的值。

于 2016-10-28T05:04:50.790 回答
0

这可以解释你的问题。显然,您需要确保 cookie 的路径对齐。

我如何读取由 jquery 设置的 rails 中的 cookie

于 2014-01-22T20:08:12.153 回答