当用户在asp.net中单击浏览器后退按钮时,如何快速重定向页面

时间:2011-12-16 03:49:37

标签: c# asp.net

我正在构建一个应用程序作为服务器客户端概念,其中服务器是一个asp.net应用程序。我想做的是

  1. 用户输入链接并在登录页面中提供登录详细信息。
  2. 认证后,用户将被重定向到主页面,即主页面和子页面。
  3. 现在当我点击退出按钮(在母版页中可用)时,会话被清除并重定向回登录页面。这很好。
  4. 但是,当我尝试单击浏览器中的后退按钮时,我已经看到上一页,几秒钟后我被重定向回登录页面。
  5. 我可以知道原因,当点击浏览器后退按钮时,是否会触发页面加载事件或屏幕后面的进程是什么。如何让页面快速重定向。

    我也浏览网页,发现为了避免缓存页面,我已经添加了所有页面和母版页,但没有使用它。它保持不变。

2 个答案:

答案 0 :(得分:1)

就像你说的那样,你需要通过设置cache-control: no-cache标题来确保没有缓存上一页,你可以在ASP.NET中执行以下操作:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

答案 1 :(得分:0)

实际上,所有浏览器都难以进行浏览器缓存。即使你这样做,你甚至不能100%肯定它没有被缓存(浏览器不管你告诉他们什么都自己做事情,但这应该涵盖大多数基础):

        Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
        Response.Expires = -1500;
        Response.CacheControl = "no-cache";
        Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
        Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
        Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
        Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
        Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1  
        Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1  
        Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1  
        Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1  
        Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1  
        Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
        Response.Cache.SetCacheability(HttpCacheability.NoCache);

现在也不认为这就够了。 Firefox喜欢使用Url进行缓存,因此如果您链接到某个页面,则可能需要通过在其末尾添加时间戳来更改URL。

但是,如果它不是导致问题的缓存,那么您可以执行一些服务器端逻辑。例如,如果会话在代码隐藏中不存在,则在后面的代码中重定向,这将在加载任何页面之前重定向。如果页面在此之后仍然加载,则肯定是浏览器缓存问题。