2

当用户登录时,我保留一个 Session 变量。因此,当用户单击 btnLogout 时,它必须清除我的所有会话并将用户注销好!!!

它确实清除了我的会话,但是如果我在退出后立即单击 IE 中的 BACK 按钮,那么我仍然处于登录状态!这意味着它会回到用户仍然登录的屏幕。

我的登出代码

protected void btnLogout_Click
{
   Session.Clear();
   Session.Abandon();
   Session.RemoveAll();

   Response.Redirect("Home.aspx");
}

为什么会这样,我该如何预防?

编辑: 代码中是否有一个选项可以让用户无法按下 Web 浏览器中的“返回”按钮?

4

4 回答 4

4

你可以把它放在你主人的 Page_Init 中:

Response.Cache.SetNoServerCaching();
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(new DateTime(1900, 01, 01, 00, 00, 00, 00));

例如,大多数银行网站都会这样做,因此您无法有效地使用后退按钮。

于 2009-05-08T02:42:37.777 回答
3

这真的是一个问题吗?是的,他们可以看到他们的前一页已被缓存,但是一旦他们尝试在此上下文中发出任何其他合法请求,这些请求就会失败,因为您的会话变量已经消失。

除非你有一些非常具体的理由来围绕这个进行编码,否则你将解决一个实际上并不存在的问题。

于 2009-05-07T10:24:32.183 回答
2

有几种方法可以告诉浏览器不要从代码隐藏、javascript 或通过 HTML 缓存页面,方法是在页面上使用以下内容

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">

在代码隐藏的代码中添加 page_load 事件以确保会话变量仍然实际存在也是一种很好的做法。

于 2009-05-07T09:35:37.590 回答
1

浏览器维护页面的缓存,因此简单地回击不会向服务器发出请求以查看您是否仍然登录。您必须使用 HTTPS 来确保缓存也受到保护。

于 2009-05-07T09:30:20.580 回答