如何在 Sinatra 中设置 cookie

How to set a cookie in Sinatra

我正在使用 Sinatra 和 Ruby 开发 Web 应用程序。我需要设置一个可从所有子域访问的 cookie。我的原始代码是这样的:

@language = 'en-US'
cookies[:USER_LANGUAGE] = @language

这产生了预期的效果(例如将 cookie "USER_LANGUAGE" 设置为 "en-US"

但是,并非所有子域都可以访问它。在查看 How to set a cookie on a separate domain in Rails 和其他类似问题后,我尝试了这个:

@language = 'en-US'
cookies[:USER_LANGUAGE] = {
  :value => @language,
  :domain => '.example.com'
}

当我检查cookie数据时,设置完全错误。 cookie的值是括号内的所有内容,域仍然只有example.com(不是.example.com

这是产生的价值:

%7B%3Avalue%3D%3E%22en-US%22%2C+%3Adomain%3D%3E%22.example.com%22%7D

如果您希望您的所有 cookie 都可以从所有子域访问,您可以为您的应用程序设置 cookie 选项:

set :cookie_options, :domain => '.example.com'

如果只需要它在一个 cookie 上,您可以这样做(而不是使用 cookies 对象):

response.set_cookie(:USER_LANGUAGE, :value => @language, :domain => '.example.com')