Rails cookie值与具有帮助程序作用域的controler不同



ENV:

轨道3.2.15
ruby 1.9.3p194(2012-04-20修订版35410([x86_64-darwin12.2.0]

我在控制器中设置了cookie,并从helper方法中读取,结果两个不一样。为什么?

# in controller
cookies[:"position"] = { :value => [ 100,200 ], :expires => 1.years.from_now }
# read it same time, it display value is an array [100, 200]
# But I read this cookies in another request, it display "100&200"

# in helper
module WelcomeHelper
  def get_position
    cookies[:"position"]
  end
end

```

get_position方法返回100&200

我在哪里可以找到文件?我在代码中发现,它描述的数组可以直接存储在cookie中并直接读取:https://github.com/rails/rails/blob/v3.2.15/actionpack/lib/action_dispatch/middleware/cookies.rb#L45,但为什么我在cookie中存储了一个arry,而读取的结果是一个字符串?

如果您想在cookie中使用非字符串值,请先将其转换为JSON。

# using the preferred 1.9 hash syntax and no need to quote "position"
cookies[:position] = { value: JSON.generate([ 100,200 ]), expires: 1.years.from_now }

查看Cookies上的Rails4.1文档。

Rails3.2文档暗示Ruby数组可以直接存储为cookie值,这一点在这个问题上引起了一些混乱,最近通过使用JSON转储/加载以及随后更安全的JSON生成/解析修复了这个问题。

最新更新