如何在同一个cookie中存储多个值 - Rails

时间:2015-11-15 21:30:52

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 cookies

所以我想存储comment_id:value对和comment_user:value

到目前为止我这样做

cookies.signed[:comment_author] = { value: @comment.id, expires: 2.hour.from_now }

基本上我想弄清楚如何将多个值存储到同一个cookie中,以避免为同一个用户创建多个cookie。这可能吗?

问题2:如果存在任何值,我如何动态附加到该cookie?

1 个答案:

答案 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值

但是你应该记住,个别的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 }