我正在使用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
答案 0 :(得分:2)
如果您希望可以从所有子域访问所有Cookie,则可以为您的应用设置Cookie选项:
set :cookie_options, :domain => '.example.com'
如果只需要一个cookie,你可以这样做(而不是使用cookies
对象):
response.set_cookie(:USER_LANGUAGE, :value => @language, :domain => '.example.com')