按下后退/前进按钮可防止查看受限制的页面页面

时间:2011-01-21 12:48:37

标签: asp.net

我正在尝试在我的网站中实现登录/注销功能,而不使用ASP.NET中的Login控件的内置功能。在某些需要用户登录的页面中,我在Page_Load

中写了这个
if (Session["cod"] == null && Session["admin"] == null)
        {
            Response.Redirect("You need to Login.aspx");
        }
        if (Session["cod"] != null || Session["admin"] != null)
        {
            LinkButton1.Text = "Logout";
        }

        if (Page.IsPostBack == false)
        {
            log_bind();
            grid1_bind();
            grid2_bind();
        }

但在我测试时,我注意到当我按下浏览器上的后退/前进按钮时,这些页面无需登录即可查看。如何防止这种情况?

5 个答案:

答案 0 :(得分:1)

这与登录控件无关,但正如其他人所说,页面的缓存。

诀窍是告诉浏览器它无法缓存页面。 看看这篇文章及其解决方案: Disable browser cache for entire ASP.NET website

答案 1 :(得分:0)

我认为即使您不使用ASP.NET登录控件,您仍应使用Principal / Identity类并验证用户是否经过身份验证。这当然是最安全的方式。

答案 2 :(得分:0)

我不知道有任何可靠的方法来做到这一点。一旦页面被查看,它就在用户的计算机上。如果他们点击后退按钮,他们正在查看缓存版本,所以我无法想象为什么这会是一个问题。

只要他们无法刷新页面以获取最新内容,如果他们能够查看他们已经访问的页面,那有什么关系呢?

答案 3 :(得分:0)

您是否尝试过将整个功能包装在

if(!IsPostBack) {

}

答案 4 :(得分:0)

浏览器可能只是向您显示页面的缓存版本,尝试将调试器附加到页面加载事件并检查是否:

  1. 实际上,当您前后点击时,它正在点击服务器
  2. 会话状态中的值,是否与已注销的用户一致。
  3. 如果会话中的值与登录用户一致,则必须检查会话清除逻辑。
  4. 但最好使用asp.net控件或system.web.security.FormsAuthentication类来执行基于自定义逻辑登录和注销等功能。