应用程序注销后单击后退按钮进入播放框架中的应用程序页面

时间:2014-03-27 09:57:59

标签: scala playframework playframework-2.0

我使用play框架添加了会话。会话工作正常,但注销页面重定向到索引页面(登录页面)。然后再单击后退或前进按钮进入主页。我已经开始退出新会话,然后它也进入了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 个答案:

答案 0 :(得分:1)

要防止浏览器后退/前进按钮导航到已登录屏幕,您需要有两种机制:

  1. 告诉浏览器他们应该始终在服务器上找到登录屏幕后面的任何网页。
  2. 装饰一个服务于您的某个安全网页的每个操作,并检查发出请求的人是否已登录。如果他们的cookie中没有任何内容,则检查应该回送索引页面。传达他们的身份。
  3. 第一个可以通过在HTTP响应中设置以下标头来实现:

    Cache-Control: no-cache
    

    来自this教程:

      

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

    您可能已经有第二种机制。如果没有,您将必须编写执行检查的操作。

    然后,建议的方法是将这两种机制应用于您的所有网页,即使用action composition