我有一个控制器,试图获取表单输入,设置cookie的值,然后重定向到一个页面,该页面将从该cookie中获取数据。
问题在于重定向标头中从未设置cookie。
注意:我已在Chrome和FF中进行了测试。Rails版本为4.0.13。在没有重定向的情况下设置cookie的效果符合预期。
以下是控制器代码:
def create
request.cookies[:foo] = "bar"
# also tried:
# cookies[:foo]="bar"
# cookies.signed[:foo]="bar"
# cookies[:foo] = {
# value: "bar",
# expires: 1.month.from_now,
# domain: ".myapplicationhostname.com"
# }
redirect_to root_url
end
重定向的响应头中没有Set-Cookie属性,因此在重定向到的路径中的控制器/操作中不可用cookie值。
我发现一些矛盾的证据表明有些浏览器不接受重定向中的cookie,但似乎这不再是问题了?无论如何,FF或Chrome都没有在响应头中显示Set-Cookie,因此这似乎不是浏览器问题。
以下是来自cURL的响应头,注意缺少Set-Cookie:
HTTP/1.1 302 Moved Temporarily
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
Location: http://app.mydomain.com:3000/
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Request-Id: 1fc1c7e5-7489-4720-bb70-28588f3abcb6
X-Runtime: 4.688166
Connection: close
Server: thin 1.6.2 codename Doc Brown
如何让Rails在重定向时设置cookie(或者至少设置header)?
request.headers["foo"] = "bar"
- RAJ.mydomain.com
,但即使在同一域上重定向时也无法正常工作,如上所示。 - Bryan Marble