Gro*_*fit 2 ruby cookies sinatra
我有一个简单的Sinatra应用程序,我正在玩,由于某种原因,cookie似乎不适用于某些路线,我觉得很奇怪.
require "sinatra"
set(:authenticate) do |*vars|
condition do
unless request.cookies.has_key?("TestCookie")
redirect to("/login"), 303
end
end
end
get "/login" do
return "No valid cookie"
end
get "/secret", :authenticate => [:auth_cookie] do
cookie = request.cookies["TestCookie"]
return "Secrets ahoy - #{cookie}"
end
get '/cookie/set' do
response.set_cookie("TestCookie", {
:expires => Time.now + 2400,
:value => "TestValue"
})
return "Cookie is set"
end
get '/cookie/get' do
cookie = request.cookies["TestCookie"]
return "Cookie with value #{cookie}"
end
Run Code Online (Sandbox Code Playgroud)
如果我去cookie /设置它正确设置cookie(可以在firecookie中看到它),那么如果我去cookies /得到我得到正确的cookie输出.但是,如果我去/ secret它总是重定向到/ login.由于我仍然是Ruby语法的新手,我认为这可能是我的条件在authenticate扩展中的问题,所以我尝试删除它并像其他人一样吐出cookie.但仍然没有,所以我不知道为什么cookie在那里,我可以在浏览器中看到...和/ cookies/get工作,但/秘密不...
我在这里错过了什么吗?
问题是cookie是用路径设置的/cookie.当您设置cookie时,您可以指定路径,该路径实际上是您希望cookie应用于网站的子部分.我想西纳特拉/机架在默认情况下,其在使用当前请求的路径/cookie/set会/cookie.
您可以通过显式指定路径使其按预期方式工作:
response.set_cookie("TestCookie", {
:expires => Time.now + 2400,
:value => "TestValue",
:path => '/'
})
Run Code Online (Sandbox Code Playgroud)
或者你可以在名为say /cookie-set而不是的路线上设置cookie/cookie/set
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |