亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scala下Play框架學習筆記(Session and Flash scopes)

發布時間:2020-07-27 18:17:51 來源:網絡 閱讀:1649 作者:金明略 欄目:開發技術

session和flash scope 的區別

      如果需要通過多個HTTP請求傳輸數據,那么就要用到session和flash scope。在session中存儲的,整個會話過程都有效,在flash scope 中存儲的,只是對下一個請求有效。服務器不存儲session和flash scope中的數據,它們只是被傳遞給了下一個請求,使用Cookies機制。這就意味著你只能存儲字符串類型,而且大小有限,最多4KB。Cookies的默認名字是PLAY_SESSION,通過application.conf中的session.cookieName可以修改。

      cookie的數據被標記了一個密鑰,因此客戶端無法修改Cookies的數據,否則數據會被判無效。

      Play Session不被用來作為緩存,如果需要緩存一些和session相關的數據,就要使用play內置的緩存機制,在用戶的session中存儲一個unique ID來保持和特定用戶的關聯。

      Session默認沒有失效時間,除非用戶關掉瀏覽器。如果需要設定失效時間,就要在用戶session中存儲一個時間戳,不管application是否需要。可以在application.conf中通過play.http.session.maxAge設置最長的失效時間,但也不能防止***恢復過了有效期的Cookies。


在Session中存儲數據

      由于Session只是Cookie,同時也只是一個HTTP的頭部,你可以用與處理請求結果相同的方式處理session的數據:

Ok("Welcome!").withSession(
  "connected" -> "user@gmail.com")

在已有的session中添加一個元素,并且生成新session的方式如下:

Ok("Hello World!").withSession(
  request.session + ("saidHello" -> "yes"))

刪除session中的元素也是用類似的方式:

Ok("Theme reset!").withSession(
  request.session - "theme")


讀取Session的值

      從HTTP請求中搜索Session:

def index = Action { request =>
  request.session.get("connected").map { user =>
    Ok("Hello " + user)
  }.getOrElse {
    Unauthorized("Oops, you are not connected")
  }}

丟棄整個Session

       以下操作可以丟棄整個Session:

Ok("Bye").withNewSession


Flash Scope

      Flash Scope的工作方式和Session有兩點不同:

      數據只在一個請求中保留,另一點是Flash cookie沒有標記,用戶可以修改它。

      Flash scope只能在沒有Ajax的applications中傳輸success/error信息,由于數據只在一個請求中并且在復雜web應用中不能保證請求的順序,因此它受到競爭條件的約束。

      使用Flash scope的例子如下:

def index = Action { implicit request =>
  Ok {
    request.flash.get("success").getOrElse("Welcome!")
  }}def save = Action {
  Redirect("/home").flashing(
    "success" -> "The item has been created")}


在view中搜索Flash scope的值,并且添加隱式的Flash參數,具體操作如下:

@()(implicit flash: Flash)...@flash.get("success").getOrElse("Welcome!")...


然后在Action中隱式指定implicit request =>,通過如下方式:

def index = Action { implicit request =>
  Ok(views.html.index())}

基于隱式的請求,一個隱式的Flash會被提供給view。


如果報了如下錯誤:

could not find implicit value for parameter flash: play.api.mvc.Flash

那說明你的Action在范圍內沒有隱式的請求。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

襄樊市| 东安县| 苗栗县| 图们市| 商都县| 定南县| 英吉沙县| 阿拉善盟| 杭州市| 大余县| 沭阳县| 绩溪县| 兴隆县| 正宁县| 新密市| 南皮县| 高密市| 通河县| 汝城县| 图木舒克市| 方城县| 咸阳市| 全椒县| 饶平县| 沧州市| 大城县| 邢台县| 龙江县| 浙江省| 乌兰浩特市| 瑞安市| 芜湖县| 乌兰察布市| 龙游县| 秦皇岛市| 赤城县| 波密县| 沙雅县| 白玉县| 吴川市| 颍上县|