【问题标题】:Stop redirect page on back button click单击后退按钮时停止重定向页面
【发布时间】:2013-08-26 11:32:27
【问题描述】:

我正在尝试删除特定网站的历史记录。当我注销页面然后按后退按钮时,页面会移到上一页,但是我希望当任何用户注销然后按后退按钮时,它将位于登录页面不在上一页的同一页面上。我正在尝试所有方法,例如会话放弃,缓存删除,但我的问题没有解决。我们也可以使用 JavaScript。

protected void btnLogout_Click(object sender, EventArgs e)
{
    HttpContext.Current.Cache.Remove("");
    HttpContext.Current.Session.Clear();
    HttpContext.Current.Session.Abandon();
    Response.Redirect("../Login.aspx");
} 

【问题讨论】:

  • “上一个”页面的页面加载事件中的代码是什么?您要删除历史记录还是仅在“注销”时结束会话?
  • 这是上一页,在注销按钮上它重定向到登录页面..
  • 不过,我的问题还是一样。
  • 现在检查,如果答案正确,则标记为答案。 :)

标签: c# javascript jquery asp.net .net


【解决方案1】:

您可以尝试使用javascript:

 <script type="text/javascript">
    //Logout clears all visited pages for Back Button
    function noBack() { window.history.forward(); }
    noBack();
    window.onload = noBack;
    window.onpageshow = function (evt) { if (evt.persisted) noBack(); }
    window.onunload = function () { void (0); }
</script>

【讨论】:

    【解决方案2】:

    如果页面是使用缓存提供的,那么请执行以下操作来设置正确的 http 标头

    HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
    HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
    HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Current.Response.Cache.SetNoStore();
    

    【讨论】:

      【解决方案3】:

      你有两个选择:

      防止页面被缓存 防止用户使用 JavaScript 退出后返回上一页。

      我会建议第一个,但如果它不适合你,请选择here中提到的第二个选项

      【讨论】:

        【解决方案4】:

        据我所知,您似乎正在处理通过会话变量登录的人。如果是这种情况,那么在母版页或基本页中,您不能通过检查某个会话变量的存在来确保该人已登录吗?如果他们已登录,则照常继续,如果没有,您可以将他们重定向回登录页面(或默认)以使他们登录?

        【讨论】:

          【解决方案5】:

          在后面的代码中添加以下代码

          protected override void OnPreRender(EventArgs e)
              {
                  base.OnPreRender(e);
                  string strDisAbleBackButton;
                  strDisAbleBackButton = "<script language=\"javascript\">\n";
                  strDisAbleBackButton += "window.history.forward(1);\n";
                  strDisAbleBackButton += "\n</script>";
                  ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "clientScript", strDisAbleBackButton);
              }
              protected void Page_Init(object Sender, EventArgs e)
              {
                  Response.Cache.SetCacheability(HttpCacheability.NoCache);
                  Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1));
                  Response.Cache.SetNoStore();
              }
          

          希望上面的代码对你有用。

          【讨论】:

            【解决方案6】:

            这个问题已经在堆栈溢出中被问过好几次了。一个简单的搜索就会得到一个解决方案。 注销后,您必须禁用后退按钮。为此您必须使用

            Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
            

            删除缓存本身将停止向后导航。

            【讨论】:

            • 我知道,但我对任何答案都不满意,所以请根据该代码帮助我
            • 是的,我在母版页上的注销按钮,它在登录页面上重定向或注销按钮点击
            • 感谢它只有在单击返回按钮一次时才有效,当两次连续单击返回按钮时,它会进入上一个保存页面
            • 如果它解决了你的问题,那么就投赞成票并标记为答案。
            • 我给你投票,因为我的问题没有完全解决。请阅读我之前的评论
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-13
            • 1970-01-01
            • 1970-01-01
            • 2014-07-01
            • 2018-12-14
            • 1970-01-01
            相关资源
            最近更新 更多