【问题标题】:How to set a cookie in Sinatra如何在 Sinatra 中设置 cookie
【发布时间】:2016-09-03 13:13:42
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。使用response 方法效果很好。
    猜你喜欢
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2017-10-14
    • 2018-11-18
    • 2012-08-01
    • 2021-05-19
    • 2018-06-14
    相关资源
    最近更新 更多