为什么我的会话值总是在刷新页面后才出现我还在play框架2中构建会话?

时间:2014-04-30 15:19:43

标签: scala session playframework-2.2

我使用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检查会话,并且只在第二次会话后才能通过请求获取。我想知道第一次如何更改会话(不需要刷新页面。)

2 个答案:

答案 0 :(得分:0)

withSession将设置一个cookie,用于为后续请求提供新会话,它不会修改当前的RequestHeader对象。您的视图无权访问控制器中所做的更改。您应该修改视图,以便将用户作为参数,而不是将整个RequestHeader传递给它。

答案 1 :(得分:0)

  

我发现新会话仅在第二次之后才有效

因为您使用的是Ok

使用

Redirect(path).withSession(newsession)//path is variable contaning the string to redirect
创建cookie后需要

重定向。然后在浏览器中检测到,因此您必须重定向。

Ok,在同一页面显示您的不同页面