【问题标题】:Back button must not go to previous page after signing out退出后,后退按钮不能转到上一页
【发布时间】:2009-12-26 17:35:23
【问题描述】:

我正在开发一个 asp.net 网站,但我没有使用 asp.net 的内置身份验证控件。我已经为网站的用户手动创建了表格。

我想要的如下

  • 登录后用户可以访问页面(已经完成)
  • 当用户按下退出时(用户转到特定页面 - 示例 - default.aspx)
  • 现在,当用户按下浏览器的“后退”按钮时,它不能转到上一页(这是在 Yahoo 页面中完成的 - 我想实现相同)

【问题讨论】:

    标签: asp.net authentication forms-authentication http-authentication


    【解决方案1】:

    为防止用户在按下后退按钮时看到上一页,您需要指示浏览器不要缓存此页:

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

    您可以将此代码放在所有经过身份验证的页面中,从而防止它们被缓存在客户端浏览器上。

    【讨论】:

    • 是的。正确且简短的解决方案。很棒的一个。你很“优秀”
    【解决方案2】:

    对于不被缓存的页面,浏览器需要适当地响应缓存指令,但不能保证这将适用于所有浏览器! (一个适当的邪恶的人可以编写自己的浏览器来忽略缓存信息,或者编写一个代理来删除它......)

    所以你不能让它在 100% 的时间内工作,但你总是会面临这样一个问题:用户可以轻松地截取屏幕截图、打印页面、在磁盘上保存副本等. 无论如何,一旦你向他们提供了一个页面......

    【讨论】:

      【解决方案3】:

      你的问题的答案是:

      • 当用户按下退出时。 (用户转到特定页面 - 示例 - default.aspx) 您可以添加一个 LinkBut​​ton 作为 Signout 链接,并在 click 事件处理程序中您可以编写 Response.Redirect("Default.aspx");

      • 现在当用户按下浏览器的“后退”按钮时,它不能转到上一页 //将以下代码添加到页面后面的代码中

        受保护的覆盖无效 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);
        

        }

      参考 csharpdotnetfreak.blogspot.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多