def index
# cookies.signed[:affiliate] = params[:affiliate] (this works)
# (the following doesn't work at all)
# cookies.delete(:affiliate) (temp delete to test if working properly)
if !cookies.present?
cookies.signed[:affiliate] = {
id: params[:affiliate],
expires: 30.days.from_now
}
end
end
在我看来,我有以下内容来显示cookie:
<%= cookies.signed[:affiliate] || 'none' %>
在我的路线中:
get ':affiliate', to: 'welcome#index'
我做错了什么?用例如下:
30.days.from_now
到期的cookie(除非已过期,否则不允许该关联企业cookie被其他关联企业覆盖。奖金问题:对于#2,我是否必须明确检查expires
日期时间?或者.present?
会为我照顾这个吗?
答案 0 :(得分:1)
这不起作用的原因是因为cookies
本身并不接受哈希。我使用JSON.generate创建cookie哈希和JSON.parse来检索数据。
还在||
上添加了if条件以处理覆盖过期的cookie。
<强>控制器强>
def index
if cookies.blank? || !(JSON.parse(cookies.signed[:affiliate])['expires'] > DateTime.now)
cookies.signed[:affiliate] = JSON.generate(
id: params[:affiliate],
expires: 30.days.from_now
)
end
end
查看强>
<%= JSON.parse(cookies.signed[:affiliate])['id'] %>
这个答案部分有效。经过一些测试后,我意识到这在Chrome中运行良好,但在FireFox和Safari中无法实现。不知道为什么......有人随意发表评论。谢谢。留下答案,因为它确实部分回答了问题。