2011-01-21 54 views
0

我试图在我的网站中实现登录/注销功能,而无需使用ASP.NET中的登录控件的内置功能。在某些页面,要求用户先登录,我已经在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(); 
     } 

这样写不过,虽然我是测试这一点,我注意到,当我按下浏览器上的后退/前进按钮,这些页面无需登录即可查看。如何防止这种情况发生?

回答

1

这与登录控件无关,但与其他状态一样,页面的缓存也是如此。

诀窍是告诉浏览器它不能缓存页面。 看看这个帖子,它的解决方案: Disable browser cache for entire ASP.NET website

+0

我认为我需要缓存禁用代码是针对整个网站。我只希望它的一些页面,我认为我应该把它放入page_load – Cipher 2011-01-21 13:25:00

0

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

0

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

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

+0

我想我已经在一些网站看到,但这些都是BIGGIES,他们显示消息“此网页已过期”等。虽然,我不是为做任何事情银行类的网络应用 – Cipher 2011-01-21 13:01:46

0

你尝过

包装的整体功能,如果(!的IsPostBack) {

}

+0

试过了,但它仍然有 – Cipher 2011-01-21 13:00:38

0

浏览器可以简单地显示你的页面的缓存版本,尝试附加调试器的页面加载事件,并检查是否:

  1. 它实际上是击中服务器,当你点击后退和前进
  2. 会话状态中的值,无论它们是否与注销的用户一致。
  3. 如果会话中的值与登录用户一致,则必须检查会话清除逻辑。

但最好使用asp.net控件或system.web.security.FormsAuthentication类来执行基于自定义逻辑的登录和注销等功能。