首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会议[:食物]与cookies.permanent[:食物]之间的差异

会议[:食物]与cookies.permanent[:食物]之间的差异
EN

Stack Overflow用户
提问于 2013-11-09 15:47:30
回答 2查看 5.8K关注 0票数 6

session[:food]="pizza"cookies.permanent[:food]=pizza的区别是什么?

我试着阅读rails文档,它说:

Rails 2引入了一个新的默认会话存储,CookieStore。CookieStore将会话哈希直接保存在客户端的cookie中。

然后我就不明白了,如果会话:食物保存在饼干里,所以cookies.permanent:food保存了,有什么区别呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-09 16:17:59

我建议您尝试一下,会话数据是在cookie (rails 3)或加密cookie (rails 4)中编码的base64。使用像Firefox‘’(WDE)插件这样的工具,它有一个cookie菜单项,使用它删除本地主机站点的所有cookie,然后将代码添加到控制器操作中

代码语言:javascript
复制
session[:food] = "pizza"
cookies.permanent[:food] = "pizza"

现在使用WDE查看cookie

代码语言:javascript
复制
Name    food
Value   pizza
Host    localhost
Path    /
...

与会议

代码语言:javascript
复制
Name    _session_name # (this value set in config/initializers/session_store.rb)
Value   a_base_64_value
Host    localhost
Path    /    
...

现在打开rails控制台并解码会话值。

代码语言:javascript
复制
$ rails console
> Base64.decode64('value from session')
# works in rails 3

如果使用rails 4,则cookie是加密的,而不是仅仅编码的,请参见http://cowbell-labs.com/2013-04-10-decrypt-rails-4-session.html

一旦解密或解码,它看起来就像

代码语言:javascript
复制
{
  "session_id"=>"xxxxx", 
  "user_return_to"=>"/", 
  "flash"=>{
    "discard"=>[:alert], 
    "flashes"=>{
      :alert=>"You need to sign in or sign up before continuing."}
    }, 
  "food"=>"pizza", 
  "_csrf_token"=>"xxxxx"
}

注意:在我的例子中,我使用的是“设计”,它为闪存添加了一条消息。

会话数据受到更好的保护,您还可以选择像数据库一样移动到不同的会话存储,而不需要更改任何代码,只需进行一些配置。

票数 9
EN

Stack Overflow用户

发布于 2013-11-09 16:20:41

如果您正在使用传统的Rails会话:这个会话对象通过将您的值“比萨”存储在浏览器关闭的cookie中,从而使它在浏览器关闭时过期(这意味着如果关闭浏览器,则会话:将被销毁)。

当我们谈论永久的时候,我们谈论的是持续的会议,那么什么意味着?

持久会话是一个永久的cookie,即使您关闭了浏览器,也仍然存在(“永远”),并且只有当您显式地过期或删除它时,才不会过期。

但是如何做一个“永远”仍然存在的饼干呢?

如果我说“永远”,那是因为这是一个棘手的问题,而做这件事的方法是设定一个长期过期的曲奇,就像20年后或者60年之后……就像这样:

代码语言:javascript
复制
cookies[:remember token] = { value: "pizza", expires: 20.years.from now.utc }

这种设置一个在未来20年到期的cookie的模式变得如此普遍,以至于Rails添加了一种特殊的永久方法来实现它,这样我们就可以简单地编写:

代码语言:javascript
复制
cookies.permanent[:food] = "pizza"

要回答你的问题,结构没有区别,每一个都是一个曲奇,但差别只存在于每一个人的一生中。

希望这对你有帮助

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19877820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档