【问题标题】:What is the difference between request.cookies and cookies in a controller?控制器中的 request.cookies 和 cookie 有什么区别?
【发布时间】:2016-10-06 01:22:24
【问题描述】:

Ruby on Rails 中的request.cookiescookies 对象有区别吗?

我目前正在尝试从我的 node.js 服务器向我的 ROR4 应用程序发送一个带有 cookie 的请求。似乎在 ROR 应用程序中,request.cookies 包含我要发送的 cookie,但 cookies 对象(现有逻辑所基于)没有它。

我已经搜索了文档,但找不到任何相关内容。有什么我错过的吗?任何帮助表示赞赏。

【问题讨论】:

  • 我遇到了同样的问题。您找出差异背后的原因了吗?

标签: ruby ruby-on-rails-4


【解决方案1】:

理想情况下,request.cookiescookies 应该相同。但是,在 POST(创建操作)请求中,rails 会验证 XSRF 令牌。如果该验证失败,来自request.cookies 的cookie 在request.cookie_jar 中不可用。这意味着,它们不能通过 cookies 方法获得。

确定 cookie 不匹配是否是因为 XSRF 令牌丢失。在您的请求中,尝试识别您的 cookie 哈希的类别。 cookies.hash 应该返回给你ActionDispatch::Cookies::CookieJar。如果它返回 ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullCookieJar,则说明 XSRF 令牌不匹配。

当您通过默认情况下不选择 XSRF 令牌并随请求发送的 javascript 进行这些调用时,可能会发生这种情况。在此处查看答案:https://stackoverflow.com/a/8175979/976880 了解如何修复它。

【讨论】:

  • 仅供参考:代替cookies.hash,您也可以使用cookies.class
【解决方案2】:

request.cookies 是一个Rack provided 方法。它只是键值对的散列,通过解析 cookie 标头获得。

控制器cookies 方法返回request.cookie_jar。 cookie jar 是由完全相同的 request.cookies 数据构建的,但在解析它时添加了一堆 Rails 功能,例如签名的 cookie、将数据序列化为 cookie 等。

我看不出为什么一个键会出现在一个中,而另一个中没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2021-06-10
    • 2012-05-07
    • 2018-06-03
    • 2011-04-14
    相关资源
    最近更新 更多