我使用playframework2.2
我在我的一个动作中写了会话:
def index = Action {implicit rs =>
var newsession
if(currentUser.isDefined){
val currentUser=SecureSocial.currentUser.get
newsession= rs.session + ("user" -> currentUser.fullName)
}else{
newsession=rs.session
}
Ok(views.html.list_subject("Hello from Scala", sublist.run(DB.createSession()))).withSession(newsession)
}
在我的list_subject页面上的我使用另一个模板main:
@main(message) {
.....
}
在main.scala.html中我使用新会话:
@(title: String)(content: Html)(implicit request: RequestHeader)
....
....
<ul class="nav navbar-nav navbar-right">
@if(request.session.get("user").isDefined){
....
}else {
<li><a href="@securesocial.controllers.routes.LoginPage.login()">Login</a></li>
}
</ul>
我发现新会话仅在第二次之后工作,我的意思是当我已经登录链接时登录不改变,只有在我刷新之后才改变。 我还通过firebug检查会话,并且只在第二次会话后才能通过请求获取。我想知道第一次如何更改会话(不需要刷新页面。)
答案 0 :(得分:0)
withSession
将设置一个cookie,用于为后续请求提供新会话,它不会修改当前的RequestHeader
对象。您的视图无权访问控制器中所做的更改。您应该修改视图,以便将用户作为参数,而不是将整个RequestHeader
传递给它。
答案 1 :(得分:0)
我发现新会话仅在第二次之后才有效
因为您使用的是Ok
使用
Redirect(path).withSession(newsession)//path is variable contaning the string to redirect
创建cookie后需要重定向。然后在浏览器中检测到,因此您必须重定向。
Ok
,在同一页面显示您的不同页面