问题 Sinatra - response.set_cookie不起作用


我需要为我的Sinatra应用程序使用cookie。如果我使用最简单的方法是有效的:

response.set_cookie('my_cookie', 'value_of_cookie')

但我需要一些选项,如域名和过期日期,所以我试试这个:

response.set_cookie("my_cookie", {:value => 'value_of_cookie', :domain => myDomain, :path => myPath, :expires => Date.new})

不起作用。没有cookie。我需要这么多......

请帮忙......谢谢!


7395
2018-02-22 12:28


起源

你是如何确定没有制作饼干的?浏览器cookie商店?以后在您的申请中使用?用wireshark读取电线上的流量?是吗? :expire => Date.new 意味着cookie应该“过时”到期? - sarnold
我在Firefox中使用cookie插件。 - Clawsy


答案:


关于的文件 http://sinatra-book.gittr.com/#cookies 说要使用set_cookie助手,但在较新版本的Sinatra中(至少从1.2.0+开始,可能更早),你应该使用response.set_cookie来设置cookie。

response.set_cookie("my_cookie", :value => "value_of_cookie",
                    :domain => myDomain,
                    :path => myPath,
                    :expires => Date.new(2020,1,1))
cookie = request.cookies["my_cookie"]

概要

不设置 localhost 作为Cookie的域名,因为您需要将其设置为“”或FALSE


16
2018-02-22 12:37



set_cookie不再是帮手了。现在是response.set_cookie()。这应该是正确的但不起作用: gittr.com/index.php/archive/sinatra-cookie-handling-in-0-9-4 - Clawsy
这有效:response.set_cookie('my_cookie',{:value =>'abc',:path => request.path,:expires => Time.now +(60 * 60 * 24 * 30)})。它会在一个月后过期。但是为什么:domain参数不起作用。 :domain => request.host在我的情况下将是'localhost'。如果我添加该参数它不起作用....但为什么? - Clawsy
request.path 不会返回域名!!!对我来说是完美的 response.set_cookie("my_cookie", :value => "1234", :domain => ".smackaho.st") - fl00r
是的,我对request.path的错误......我知道。但是为什么请求.host工作? - Clawsy
阅读有关设置的内容 localhost 作为cookie的域名: stackoverflow.com/questions/1134290/...  when working on localhost (!) the cookie-domain must be set to "" or NULL or FALSE instead of "localhost" - fl00r