如何在Sinatra中设置cookie

时间:2016-09-03 04:50:23

标签: ruby 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

1 个答案:

答案 0 :(得分:2)

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

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

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

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