如何在 ApplicationController 中设置 cookie?

Posted

技术标签:

【中文标题】如何在 ApplicationController 中设置 cookie?【英文标题】:How to set cookies in ApplicationController? 【发布时间】:2011-09-08 19:40:58 【问题描述】:

我需要在我的 ApplicationController 中设置 cookie,但我不确定如何设置。我试过使用 cookie - 什么都没有,使用 ActionController::Cookies - 什么都没有。 除了设置和获取 cookie 之外,我不需要任何其他东西,但我需要的是在 ApplicationController 中设置它们。

编辑:

找到答案:request.cookies['help'] = 'yes'

【问题讨论】:

【参考方案1】:

在应用程序控制器中设置 cookie 是什么意思?您将在浏览器中设置与某些控制器操作相对应的 cookie。如果您想为所有操作设置 cookie,那么您可以考虑使用 before 过滤器并将该过滤器应用于您的所有控制器操作。

您可以设置和删除cookies,如下所示:

   cookies[:key] = 
       :value => 'a yummy cookie',
       :expires => 1.year.from_now,
       :domain => 'domain.com'
     

     cookies.delete(:key, :domain => 'domain.com')

请注意,如果在设置 cookie 时指定了 :domain,则在删除 cookie 时也必须指定域。

例如cookies[:user_name] = "david"

【讨论】:

您也可以使用cookies.signed[:key]=...对cookie值进行加密,以防止外部修改。 澄清:signed 不会加密密钥以避免查看,只是修改。 encrypted 两者都可以 指向documentation的链接。【参考方案2】:

您可以简化您想要停留一段时间的 cookie

cookies.permanent[:some_cookie] = "gingerbread"

【讨论】:

【参考方案3】:

Cookie 是通过 ActionController#cookies 读取和写入的。正在读取的 cookie 是与请求一起收到的,正在写入的 cookie 将与响应一起发送出去。读取 cookie 并不会取回 cookie 对象本身,只会取回它所持有的值。

cookies[:appToken] = 
  value: 'IOWQ92038192319JKNJKW',
  expires: 1.year.from_now,
  domain: 'www.example.com',
  path: '/admin',
  secure: false,
  httponly: false,

path - 此 cookie 适用的路径。默认为应用程序的根目录。

secure - 此 cookie 是否仅传输到 HTTPS 服务器。默认为false

httponly - 这个 cookie 是可以通过脚本访问还是只能通过 HTTP 访问。默认为false。如果 cookie httponly 设置为 true,则无法通过 javascript 访问 cookie。这是出于安全目的而设置的,以保护 cookie 免受攻击者窃听浏览器和服务器之间的通信通道的攻击。然而,窃听并不是获取 cookie 的唯一攻击媒介。攻击者可以利用 XSS 漏洞窃取身份验证 cookie。原来HttpOnly标志可以用来解决这个问题。

欲了解更多信息 - https://api.rubyonrails.org/v5.2.1/classes/ActionDispatch/Cookies.html

【讨论】:

以上是关于如何在 ApplicationController 中设置 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ApplicationHelper 调用 ApplicationController 方法

Rails 2.0.2 中的 ApplicationController 方法不使用引擎覆盖插件方法

java ApplicationController.java

java ApplicationController.java

Ember应用程序控制器共享数据

应该如何访问 /lib 中的查看辅助方法?