所以我想存储comment_id:value
对和comment_user:value
对
到目前为止我这样做
cookies.signed[:comment_author] = { value: @comment.id, expires: 2.hour.from_now }
基本上我想弄清楚如何将多个值存储到同一个cookie中,以避免为同一个用户创建多个cookie。这可能吗?
问题2:如果存在任何值,我如何动态附加到该cookie?
答案 0 :(得分:3)
使用一个cookie执行此操作的唯一方法是将数据序列化为某种文本格式,如YAML或JSON。
示例:
cookies.signed[:comment_data] = { value: {comment_id: 1, comment_user:2}.to_yaml, expires: 2.hour.from_now }
要阅读它,只需通过:YAML.load
但是你应该记住,个别的cookie大小限制为4K字节(实际上甚至更少,因为签名cookie会增加cookie的值大小),所以你不能把你想要的数据放在那里。因此,如果你需要存储的只是一些数字,你可以用更紧凑的格式存储它们,例如[1, 2].to_json
。
关于第二点:您无法真正向cookie添加任何内容,但您可以读取存储在cookie中的任何内容并将其与您要追加的数据合并,然后再次设置cookie。
您可以这样做:
if cookies[:comment_data]
existing_data_string = cookies[:comment_data]
existing_data = YAML.load(existing_data_string)
else
existing_data = {...}
end
existing_data.update(comment_number: 1234)
cookies.signed[:comment_data] = { value: existing_data.to_yaml, expires: 2.hour.from_now }