可以在cookie中存储哈希吗?

时间:2013-11-18 19:39:24

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

任何人都知道我是否可以在cookie中添加哈希值? 像这样:cookies [:test] = {:top => 5,:middle => 3,:bottom => 1}

由于

3 个答案:

答案 0 :(得分:14)

我会考虑序列化哈希来存储它。然后反序列化它以检索它。

序列化哈希时,结果将是一个编码字符串。可以对此字符串进行解码以恢复原始对象。

您可以使用YAML或JSON。 Ruby中都很好地支持它们。


YAML示例

require "yaml"

cookies[:test] = YAML::dump {a: 1, b: "2", hello: "world"}
# => "---\n:a: 1\n:b: '2'\n:hello: world\n"

YAML::load cookies[:test]
# => {a: 1, b: 2, c: "world"}

JSON示例

require "json"

cookies[:test] = JSON.generate {a: 1, b: "2", hello: "world"}
# => '{"a":1,"b":"2","hello":"world"}'

JSON.parse cookies[:test]
# => {"a"=>1, "b"=>"2", "hello"=>"world"}

注意:使用JSON.parse时,生成的对象将包含基于字符串的键

答案 1 :(得分:2)

使用Rails 4.1我必须使用这样的括号。没有它就会出错。

cookies[:test] = JSON.generate({a: 1, b: "2", hello: "world"})

答案 2 :(得分:1)

有许多方法可以实现(即存储字符串并eval该值,SCARY!)。这是一种简单的方法。

cookies[:test_top]    = 5
cookies[:test_middle] = 3
cookies[:test_bottom] = 1

您还可以转换为JSON,然后在加载cookie时解析它。

较新版本的Rails包括使用会话对象自动序列化。