ASP.Net注销未按预期工作

ASP.Net注销未按预期工作,asp.net,session,logout,Asp.net,Session,Logout,我知道这个问题以前已经被问过很多次了,相信我,在再次问之前,我已经通过了所有的帖子寻找解决方案 如果用户登录到某个页面,获取URL的副本,然后注销,然后将URL粘贴回浏览器,则在浏览器再次重定向到登录页面之前,他们可以访问之前短暂访问过的页面。在这个简短的窗口中,如果他们用鼠标速度足够快,并且可以单击按钮或其他控件,他们就会以某种方式重新登录到站点,而不会提出任何问题 我已经尝试过在每个页面加载事件中包含来自另一个主题线程的以下代码建议,以避免缓存,但没有成功 private void

我知道这个问题以前已经被问过很多次了,相信我,在再次问之前,我已经通过了所有的帖子寻找解决方案

如果用户登录到某个页面,获取URL的副本,然后注销,然后将URL粘贴回浏览器,则在浏览器再次重定向到登录页面之前,他们可以访问之前短暂访问过的页面。在这个简短的窗口中,如果他们用鼠标速度足够快,并且可以单击按钮或其他控件,他们就会以某种方式重新登录到站点,而不会提出任何问题

我已经尝试过在每个页面加载事件中包含来自另一个主题线程的以下代码建议,以避免缓存,但没有成功

    private void ExpirePageCache()
    {
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetExpires(DateTime.Now - new TimeSpan(1, 0, 0));
        Response.Cache.SetLastModified(DateTime.Now);
        Response.Cache.SetAllowResponseInBrowserHistory(false);
    }
logout.aspx中的代码如下:

    protected void Page_Load(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
        HttpContext.Current.Session.Clear();
        HttpContext.Current.Session.Abandon();
        Response.Redirect("~/Account/Login.aspx");
    }
我应该使用
Server.Transfer()
而不是
Response.Redirect()


我在某个地方读到,我不允许以编程方式清除浏览器历史记录,所以我有点卡住了。有人有任何线索吗?

是的,那行代码已经包含在logout.aspx页面的页面加载事件中。这是执行的第一行代码…

我怀疑出了什么问题

调用response.redirect时,不会将生成的任何页面内容发送到客户端。ASP使用缓冲,因此当您生成页面时,它将被缓冲,直到您到达末尾,此时缓冲将被发送到客户端。这允许您在最后一刻进行更改,例如发送重定向响应。所以这不是你的问题

您是在使用输出缓存还是将表单身份验证票证设置为持久?如果浏览器有内容的缓存副本,它将显示该副本,而不是命中服务器(缓存的设计目的就是这样)。但是,在您点击服务器的那一刻,如果cookie无效,那么服务器应该将您重定向到某个地方以获取新的票证。如果它没有这样做,那么不知何故它找到了一张有效的票

你可以用小提琴来监控交通。您可以通过使用Fiddler手动发送请求并删除会话和票据cookie来模拟新的浏览器会话

西蒙