Revel Session / Flash

2022-07-28 14:11 更新

Revel 支持兩種 基于 cookie 存儲機(jī)制

// 一個簽名 cookie (不超過4kb).
// 限制: Keys may not have a colon in them.
type Session map[string]string

// 在每個請求中,F(xiàn)lash 獲取并重寫cookie。
// 它允許數(shù)據(jù)每次跨越存儲到一個頁面。It allows data to be stored across one page at a time.
// 它通常用來實現(xiàn)成功或錯誤消息。
// 比如: Post/Redirect/Get : http://en.wikipedia.org/wiki/Post/Redirect/Get
type Flash struct {
    Data, Out map[string]string
}

Session

Revel的 “session” 是一個加密簽名存儲的字符串 map。

影響如下:

  • 大小不超過 4kb。
  • 所有數(shù)據(jù)被保存為一個序列化的字符串。
  • 用戶可以查看、修改所有數(shù)據(jù) (未加密)。

session cookie 的默認(rèn)過期時間是瀏覽器關(guān)閉。 可以在app.config修改session.expires配置來指定一個有效期時間。格式是time.ParseDuration.

Flash

Flash 支持單獨使用字符串存儲。這對于實現(xiàn) Post/Redirect/Get 模式是很有用的, 或臨時顯示 “操作成功!” 或 “操作失敗!” 消息。

下面是一個例子:

// 一個設(shè)置頁面
func (c App) ShowSettings() revel.Result {
    return c.Render()
}

// 處理頁面提交數(shù)據(jù)
func (c App) SaveSettings(setting string) revel.Result {
    // 驗證用戶輸入
    c.Validation.Required(setting)
    if c.Validation.HasErrors() {
        // 設(shè)置被帶回的flash cookie錯誤信息
        c.Flash.Error("Settings invalid!")
        // 在flash cookie中保存驗證錯誤
        c.Validation.Keep()
        // 復(fù)制所有給定的參數(shù)(URL, Form, Multipart)到flash cookie
        c.FlashParams()
        return c.Redirect(App.ShowSettings)
    }
    saveSetting(setting)
    // 設(shè)置flash cookie成功消息
    c.Flash.Success("Settings saved!")
    return c.Redirect(App.ShowSettings)
}

例子主要功能如下:

  1. 用戶獲取設(shè)置頁面。
  2. 用戶提交一個表單 (POST)。
  3. 應(yīng)用程序處理用戶請求,保存錯誤或成功的消息到flash中,然后重定向設(shè)置頁面 (REDIRECT)。
  4. 用戶獲取設(shè)置頁面, 顯示flash中的消息。 (GET)

主要使用了兩個函數(shù):

  1. Flash.Success(message string) 是 Flash.Out["success"] = message簡寫方式
  2. Flash.Error(message string) 是 Flash.Out["error"] = message簡寫方式

在模板中使用key來獲取Flash 消息。例如, 通過簡寫函數(shù)獲取成功和錯誤消息:

{{.flash.success}}
{{.flash.error}}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號