gpt4 book ai didi

ruby - Sinatra cookies 在某些路线上消失了吗?

转载 作者:数据小太阳 更新时间:2023-10-29 08:33:53 25 4
gpt4 key购买 nike

我正在玩一个简单的 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

如果我转到 cookies/set,它会正确设置 cookie(可以在 firecookie 中看到它),然后如果我转到 cookies/get,我会得到正确的 cookie 输出。但是,如果我转到/secret,它总是重定向到/login。由于我对 Ruby 语法还很陌生,我认为这可能是我在身份验证扩展中的条件有问题,所以我尝试删除它并像另一个一样吐出 cookie。但是仍然没有,所以我不知道为什么 cookie 在那里,我可以在浏览器中看到它......并且/cookies/get 有效,但/secret 没有......

我是不是漏掉了什么?

最佳答案

问题是 cookie 是用路径 /cookie 设置的。当您设置 cookie 时,您可以指定一个路径,该路径实际上是您希望 cookie 应用到的网站的一个子部分。我想 Sinatra/Rack 默认使用当前请求的路径,在 /cookie/set 中将是 /cookie

您可以通过显式指定路径使其按您期望的方式工作:

  response.set_cookie("TestCookie", {
:expires => Time.now + 2400,
:value => "TestValue",
:path => '/'
})

或者您可以在名为 /cookie-set 而不是 /cookie/set 的路径上设置 cookie>

关于ruby - Sinatra cookies 在某些路线上消失了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com