如何在 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')
我正在使用 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')