Go Revel - Session / Flash(会话与flash)

##Session / Flash 作用域 revel提供了两种cookies存储机制: // 一个加密签过的cookie (限制为4kb). // 限制: Key 中不能有冒号 type Session map[string]string // Flash代表只作用于每个请求的cookie,属于瞬时消息 // 它允许存储只跨越一个页面的数据,是临时性的 // 通常被用于存储并显示 执行成功 或 错误消息 // e.g. the Post/Redirect/Get pattern: http://en.wikipedia.org/wiki/Post/Redirect/Get type Flash struct { Data, Out map[string]string } ##Session Revel的会话是指一个字符串map,被存储为加密签名的cookies。 有几点需要注意: 1、4kb限制 2、所有数据被序列化为字符串 3、所有数据可以被用户看到(未加密),并可以被安全的修改 ##Flash `Flash`提供一次性字符串存储。 它可以在`Post/Redirect/Get`请求的页面上一次性的显示“操作成功!”或“操作失败!”消息。 示例: // Show the Settings form func (c App) ShowSettings() revel.Result { return c.Render() } // Process a post func (c App) SaveSettings(setting string) revel.Result { c.Validation.Required(setting) if c.Validation.HasErrors() { // 在flash中存储错误提示信息 c.Flash.Error("Settings invalid!") c.Validation.Keep() c.FlashParams() return c.Redirect(App.ShowSettings) } saveSetting(setting) // 在flash中存储成功提示信息 c.Flash.Success("Settings saved!") return c.Redirect(App.ShowSettings) } 上面示例的过程: 1、用户获取setting页面 2、用户向setting页面POST数据 3、程序处理用户提交的数据,并且保存错误/成功提示信息到`flash`,然后使用`REDIRECT`重转向至其他页面。 这里用到了两个便利的方法: 1、`Flash.Success(message string)` 是 `Flash.Out["success"] = message`的简化版 2、`Flash.Error(message string)` 是 `Flash.Out["error"] = message`的简化版 flash信息可以在模板中使用key来访问。例如,在模板中使用以下方式来获取成功/错误信息: {{.flash.success}} {{.flash.error}}

posted on 2013-08-19 21:46  黑暗伯爵  阅读(1364)  评论(0编辑  收藏  举报

导航