Play 2.6 Session and Flash scope

Session and Flash scope

如果想要在多次http请求间保存数据,可以将数据保存在会话或者flash scope中,保存在会话中的数据在整个用户会话期间都有效,保存在flash中的数据只在下次请求中可用。

session和flash中的数据没有保存到服务端中,而是通过cookies的方式添加到下一次的请求中,所以保存的数据十分有限(4KB)且只能保存String

Session配置
超时

通过application.conf中的session.maxAge可以设置超时时间,单位为秒,超过这个时间cookie会被浏览器清空,play.http.session.jwt.expiresAfter也要设置相同的时间(2.6.10版本的start模板中没有该项配置),maxAge会从浏览器中清除cookie信息,JWTexp中的claim会被设置到cookie中,在超时后使cookie失效。

设置session信息
public Result login() {
    session("connected", "user@gmail.com");
    return ok("Welcome!");
}

从中删除一条数据

public Result logout() {
    session().remove("connected");
    return ok("Bye");
}

读取数据

public Result index() {
    String user = session("connected");
    if(user != null) {
        return ok("Hello " + user);
    } else {
        return unauthorized("Oops, you are not connected");
    }

清除整个session

public Result logout() {
    session().clear();
    return ok("Bye");
}
Flash scope

flash中的数据仅保存到下一个request中,且未被签名保护。因此flash仅用于在非Ajax请求中传送成功或失败信息。

一个例子

在保存一条信息后,想要将页面重定向到初始页面,并且想要在初始页面中显示一条信息表示保存成功,就可以使用flash

public Result save() {
    flash("success", "The item has been created");
    return redirect("/home");// /home需要在routes中配置
}

在index action中,可以检查flash中是否有success信息

public Result index() {
    String message = flash("success");
    if(message == null) {
        message = "Welcome!";
    }
    return ok(message);
}

flash中的值可以被Twirl模板读取

@if(flash.containsKey("success")) {
  @flash.get("success")
} else {
  Welcome!
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值