【问题标题】:How to store more than one values, in same cookie - Rails如何在同一个 cookie 中存储多个值 - Rails
【发布时间】:2015-11-16 05:54:41
【问题描述】:

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

到目前为止,我这样做了

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

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

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

【问题讨论】:

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


    【解决方案1】:

    使用一个 cookie 的唯一方法是将数据序列化为 YAML 或 JSON 等文本格式。

    例子:

    cookies.signed[:comment_data] = { value: {comment_id: 1, comment_user:2}.to_yaml, expires: 2.hour.from_now }
    

    要读回它,只需通过以下方式处理 cookie 值: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 }
    

    【讨论】:

    • 非常感谢您的回答,先生,您能否也回答我的第二个问题?我编辑了我的初始帖子谢谢!
    • 我在答案中添加了一些信息。
    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多