0

我有一个登录表单,其中包含两个框和 buttonclick 上的按钮我使用 sql 数据库验证用户并将 id 存储在会话中并设置 FormsAuthentication 以供以后使用。在注销按钮上,我将它们重定向到 logout.aspx,我在其中销毁会话并重定向到登录页面:

 Session.Abandon();
 FormsAuthentication.SignOut();

现在注销后,如果我使用浏览器后退按钮返回,我仍然可以看到我的上一个页面,但如果我刷新我得到object reference not set to an instance of an object.

protected void Page_Load(object sender, EventArgs e)
Line 33:         {
Line 34:             string id = Session["ID"].ToString();

如果发生这种情况,最好的解决方法是让用户重新登录?

4

2 回答 2

5

注意:我建议你使用

if(Session["ID"] != null)
{

}

但我也建议你使用这个configuration

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Login.aspx"
           defaultUrl="default.aspx" />
  </authentication>
</system.web>

您的注销链接/按钮应指向包含此代码的页面,以及您想要的任何其他内容。

private void Page_Load(object sender, System.EventArgs e)
{
    // Put user code to initialize the page here
    Session.Abandon();
    FormsAuthentication.SignOut();
}

注:时序图

在此处输入图像描述

于 2012-10-12T09:07:03.777 回答
1

您应该首先检查Session["ID"] != null 用户是否未通过身份验证。

但是如果你使用 FormsAuthentication 你也可以使用User.Identity.IsAuthenticated

于 2012-10-12T09:04:46.920 回答