2014-03-27 18 views
3

我使用播放框架添加了会话。会话工作正常,但注销页面重定向到索引页面(登录页面)后,点击后退或前进按钮再次进入主页面。我已经开始注销的新会话,然后它也进入homw页面。如何显示相同的索引页面后退或前进按钮单击?应用程序注销后点击后退按钮进入应用程序页面在播放框架

def login = Action { 
    { implicit request => 

      val email = request.body.asFormUrlEncoded.get("email")(0) 
      val password = request.body.asFormUrlEncoded.get("password")(0) 

      loginForm.bindFromRequest.fold(
       errors => BadRequest(html.index(emailForm,errors,"Please enter valid username password")), 
       contact => Redirect(routes.Application.home).withSession("email" -> email,"password" -> password) 
     ) 
     } 
    } 

    def home = Action { request => 
      request.session.get("email").map{ user => Ok(views.html.home()) 
     }.getOrElse{ 
      Ok(views.html.index(emailForm,loginForm,"")) 
     } 
    } 

    def logout = Action { 
     Redirect(routes.Application.index).withNewSession 
    } 

回答

1

为了防止浏览器的后退/前进按钮从导航到登录屏幕,你需要有两个机制到位:

  1. 告诉浏览器,他们应该总是打你的服务器任何位于您的登录屏幕后面的网页。
  2. 用一张支票来装饰您的安全网页中的每一项操作,以查看提出请求的人是否已登录。如果检查人员的Cookie中没有任何内容,则该检查应该返回索引页面传达他们的身份。

其中第一个可以让你的行动设置下列头中的HTTP响应来实现:

Cache-Control: no-cache 

this教程:

无缓存 - 强制高速缓存在每次释放缓存副本之前将请求提交给源服务器进行验证。这有助于确保认证(与公共结合)得到尊重,或者保持严格的新鲜度,而不会牺牲高速缓存的所有好处。

您可能已经有了第二种机制。如果没有,你必须写一个执行检查的动作。

然后将这两种机制应用于所有页面的推荐方法是使用action composition

相关问题