【问题标题】:Sinatra - response.set_cookie doesn't workSinatra - response.set_cookie 不起作用
【发布时间】:2014-08-04 23:56:00
【问题描述】:

我需要为我的 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?浏览器cookie存储?以后在您的应用程序中使用?用wireshark读取线路上的流量? :expire => Date.new 是否意味着 cookie 应该“立即”过期?
  • 我在 Firefox 中使用 cookie 插件。

标签: ruby cookies set sinatra


【解决方案1】:

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

【讨论】:

  • set_cookie 不再是助手。现在是 response.set_cookie()。这应该是正确的,但不起作用:gittr.com/index.php/archive/sinatra-cookie-handling-in-0-9-4
  • 这有效: response.set_cookie('my_cookie', { :value => 'abc', :path => request.path, :expires => Time.now + (60 * 60 * 24 * 30) })。一个月后到期。但是为什么 :domain 参数不起作用。 :domain => request.host 在我的例子中是'localhost'。如果我添加该参数它不起作用....但是为什么呢?
  • request.path 不会返回域!!!对我来说非常适合response.set_cookie("my_cookie", :value => "1234", :domain => ".smackaho.st")
  • 是的,我对 request.path 的错误...我知道。但是为什么 request.host 不起作用?
  • 阅读有关将localhost 设置为cookie 域的信息:stackoverflow.com/questions/1134290/… when working on localhost (!) the cookie-domain must be set to "" or NULL or FALSE instead of "localhost"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 2014-05-05
  • 1970-01-01
相关资源
最近更新 更多