我使用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
}
答案 0 :(得分:1)
要防止浏览器后退/前进按钮导航到已登录屏幕,您需要有两种机制:
第一个可以通过在HTTP响应中设置以下标头来实现:
Cache-Control: no-cache
来自this教程:
no-cache - 强制缓存每次在释放缓存副本之前将请求提交到源服务器进行验证。这有助于确保认证(与公众结合),或保持严格的新鲜度,而不会牺牲缓存的所有好处。
您可能已经有第二种机制。如果没有,您将必须编写执行检查的操作。
然后,建议的方法是将这两种机制应用于您的所有网页,即使用action composition。