控制器中的 request.cookies 和 cookie 有啥区别?

Posted

技术标签:

【中文标题】控制器中的 request.cookies 和 cookie 有啥区别?【英文标题】: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 对象(现有逻辑所基于)没有它。

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

【问题讨论】:

我遇到了同样的问题。您找出差异背后的原因了吗? 【参考方案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://***.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 等。

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

【讨论】:

以上是关于控制器中的 request.cookies 和 cookie 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Request.Cookies使用方法分析

C#中Request.Cookies 和 Response.Cookies 的区别分析

Django关于设置和获取cookies

C# 清楚Cookies

Django中的cookie和session

django cookies与session