Session / Flash

最后更新于:2022-04-01 04:21:58

Revel 支持两种 基于 cookie 存储机制 ~~~ // 一个签名 cookie (不超过4kb). // 限制: Keys may not have a colon in them. type Session map[string]string // 在每个请求中,Flash 获取并重写cookie。 // 它允许数据每次跨越存储到一个页面。It allows data to be stored across one page at a time. // 它通常用来实现成功或错误消息。 // 比如: Post/Redirect/Get : http://en.wikipedia.org/wiki/Post/Redirect/Get type Flash struct { Data, Out map[string]string } ~~~ ## Session Revel的 “session” 是一个加密签名存储的字符串 map。 影响如下: * 大小不超过 4kb。 * 所有数据被保存为一个序列化的字符串。 * 用户可以查看、修改所有数据 (未加密)。 session cookie 的默认过期时间是浏览器关闭。 可以在app.config修改session.expires配置来指定一个有效期时间。格式是[time.ParseDuration](http://golang.org/pkg/time/#ParseDuration). ## Flash Flash 支持单独使用字符串存储。这对于实现 [Post/Redirect/Get 模式](http://en.wikipedia.org/wiki/Post/Redirect/Get)是很有用的, 或临时显示 “操作成功!” 或 “操作失败!” 消息。 下面是一个例子: ~~~ // 一个设置页面 func (c App) ShowSettings() revel.Result { return c.Render() } // 处理页面提交数据 func (c App) SaveSettings(setting string) revel.Result { // 验证用户输入 c.Validation.Required(setting) if c.Validation.HasErrors() { // 设置被带回的flash cookie错误信息 c.Flash.Error("Settings invalid!") // 在flash cookie中保存验证错误 c.Validation.Keep() // 复制所有给定的参数(URL, Form, Multipart)到flash cookie c.FlashParams() return c.Redirect(App.ShowSettings) } saveSetting(setting) // 设置flash cookie成功消息 c.Flash.Success("Settings saved!") return c.Redirect(App.ShowSettings) } ~~~ 例子主要功能如下: 1. 用户获取设置页面。 2. 用户提交一个表单 (POST)。 3. 应用程序处理用户请求,保存错误或成功的消息到flash中,然后重定向设置页面 (REDIRECT)。 4. 用户获取设置页面, 显示flash中的消息。 (GET) 主要使用了两个函数: 1. `Flash.Success(message string)` 是 `Flash.Out["success"] = message`简写方式 2. `Flash.Error(message string)` 是 `Flash.Out["error"] = message`简写方式 在模板中使用key来获取Flash 消息。例如, 通过简写函数获取成功和错误消息: ~~~ {{.flash.success}} {{.flash.error}} ~~~
';