Может хранить хэш в cookie?

Кто-нибудь знает, могу ли я помещать хэш в файл cookie? Что-то вроде этого: cookies [: test] = {: top = > 5,: middle = > 3,: bottom = > 1}

Спасибо

Ответ 1

Я заглядываю в сериализацию хэша для его хранения. Затем десериализуйте его, чтобы извлечь его.

Когда вы сериализуете хеш, результат будет закодированной строкой. Эта строка может быть расшифрована, чтобы вернуть исходный объект.

Для этого вы можете использовать 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 результирующий объект будет иметь строковые ключи

Ответ 2

С Rails 4.1 мне пришлось использовать круглые скобки вроде этого. Без этого он допустил ошибку.

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

Ответ 3

Существует несколько способов (например, сохранение строки и eval с этим значением, SCARY!). Это простой способ.

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

Вы также можете преобразовать в JSON, а затем проанализировать его при загрузке файла cookie.

Новые версии Rails включают автоматическую сериализацию с использованием объекта сеанса.