0

在 playframework 2 中,会话和 cookie 被修改在下一个会话中可用,但在当前会话中不可用。

像代码:

好的(views.html.something("Hello from Scala")).withSession(("user"->"Admin"))

本次会议将在下一次会议上进行修改和介绍。我可以制作一些在当前会话中可用的 Cookie 吗?

我不想使用参数来修改它,原因是如果我使用参数作为用户登录和角色识别标签,它将添加所有页面控制参数表。我想将其作为 AOP 进行,注入会话中,然后仅查看会话以找出请求来自何处以及如何在模板框架中而不是在内容中响应它。任何对此问题有更好解决方案的人也欢迎发布。

4

1 回答 1

0

Play 的会话是存储在 cookie 中的客户端会话,并与每个响应一起发送到客户端。由于您只能在实际回答时修改会话,因此您想在当前操作(请求 - 响应周期)中使用的任何更改都可能在该特定操作中可供您使用。

如果您的目标是查看模板内的会话,那么我建议您将会话的复制版本显式传递给模板并将其设置为新会话。

控制器动作:

def someAction = Action { implicit request =>
  val updatedSession = request.session.copy(Map("user" -> "Admin")
  Ok(views.html.something("Hello from Scala")(updatedSession)).withSession(updatedSession)
}

模板:

@(text: String)(implicit session: Session)

<h1>@text</h1>
@session.get("user").map { u=>
  Your role is: @u
}
于 2014-05-08T08:48:54.533 回答