【问题标题】:Deleting Cookies from a Controller从控制器中删除 Cookie
【发布时间】:2011-08-31 12:54:27
【问题描述】:

我使用 jQuery 在我的表单中设置了一些 cookie 值。我可以通过cookies 方法在我的Rails 控制器中很好地阅读它们。当我拨打cookies.delete(:my_key) 时,当我再次拨打cookies 时,它们似乎消失了。但是当我重新加载页面时,cookies 又回来了。

有没有办法从我的控制器内部永久删除 cookie?

编辑

这很奇怪,因为我正在查看响应标头,它们似乎正在删除 cookie。可能是因为是302请求?

Set-Cookie: my_key=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT

【问题讨论】:

    标签: ruby-on-rails cookies


    【解决方案1】:

    例如,您的 cookie 如下所示

    cookies[:foo] = {:value => 'bar', :domain => '.text.com'}
    

    当你尝试这个 => cookies.delete :foo

    日志会说 => Cookie set: foo=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT

    请注意域丢失。试过这种方式

    cookies.delete :foo, :domain => '.text.com'

    功能 = >

    # Removes the cookie on the client machine by setting the value to an empty string
    # and setting its expiration date into the past.  Like []=, you can pass in an options
    # hash to delete cookies with extra data such as a +path+.
    def delete(name, options = {})
      options.stringify_keys!
      set_cookie(options.merge("name" => name.to_s, "value" => "", "expires" => Time.at(0)))
    end
    

    【讨论】:

    • 我似乎记得很多与基于 Rack 的框架的 cookie 相关的问题。您的解决方案应该有效,并且希望自去年以来所有问题都已解决。
    • 同意此答案的免费信息:api.rubyonrails.org/classes/ActionDispatch/Cookies.html 表示“请注意,如果您在设置 cookie 时指定 :domain,则在删除 cookie 时还必须指定域”
    【解决方案2】:

    根据rails api,现在有一个删除方法,所以如果你没有设置域使用

    cookies.delete :my_key
    

    如果你设置了域

    cookies.delete :my_key, domain: 'mydomain.com'
    

    【讨论】:

      【解决方案3】:

      我们可以通过将名称和选项传递给delete 方法来删​​除cookie,如下所示:

      语法:delete(name, options = {})

      描述:通过将值设置为空字符串和过去的到期日期来删除客户端计算机上的 cookie。与 []= 一样,您可以传入选项哈希以删除带有额外数据(例如 :path)的 cookie。

      例子:

      cookies.delete('JWT', {
         value: "", 
         expires: 1.day.ago,
         path: '/api'
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 2010-11-19
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多