当用户在ASP.net MVC 5中注销时,所有会话元素的清除程度如何?

时间:2017-01-12 08:34:45

标签: javascript c# asp.net-mvc-5

我按照以下代码:



function My_Function() {
  var x;
  if (confirm("Exit?") == true) {
    x = "Ok";
    window.location.href = '@Url.Action("Login", "Account")';
    Session.Abandon();
  } else {
    x = "Cancel";
  }
}




我想要防止的是,在退出后,我点击后退导航按钮,我不想回到上一页。

2 个答案:

答案 0 :(得分:0)

浏览器可以在本地缓存内容。因此,无论您在服务器上执行什么操作,在注销后,如果用户单击“返回”按钮,浏览器可以决定从本地缓存中获取最后一页并显示它。

为了防止此行为,您可以为需要在禁用缓存时进行身份验证的所有控制器操作提供服务。这可以通过用custom [NoCache] filter进行装饰来实现。此过滤器将确保在提供需要身份验证的操作时设置正确的响应标头,以防止浏览器缓存它们。

请注意,Session.Abandon();调用应该在您的服务器上完成 - 在Logout控制器操作中应该清除身份验证cookie和会话状态。

答案 1 :(得分:0)

Session.ClearSession.RemoveAll相同;后者只是称前者。他们会立即删除会话中存储的所有项目,但会话本身仍然存在。 Session_OnEnd不会触发。

Session.Abandon实际上并不会立即清除值,它只是标记在当前请求结束时放弃的会话。您可以继续读取请求其余部分的值。如果您稍后在请求中写入会话,则会在请求结束时悄悄地丢弃新值,而不会发出警告。 Session_OnEnd在请求结束时触发,而不是在调用Abandon时触发。