1

我正在使用 c# 和 MSSQL DB 在 ASP.NET 中开发一个应用程序。我正在使用一个简单的逻辑,如果会话变量包含适当的值,那么应该打开一个页面,否则它应该重定向到登录页面。这是工作的代码。

protected void Page_Load(object sender, EventArgs e)
        {
            if(Session["loggedinloginid"]==null || Session["loggedinpassword"]==null)
                Response.Redirect("login.aspx");

            con.ConnectionString = ConfigurationManager.ConnectionStrings["familyConnectionString"].ConnectionString;
            con.Open();
            adp = new SqlDataAdapter("select * from admins where loginid=N'" + Session["loggedinloginid"].ToString() + "' AND password=N'" + Session["loggedinpassword"].ToString() + "'", con);
            dt = new DataTable();
            adp.Fill(dt);

            if (dt.Rows.Count == 0)
                Response.Redirect("login.aspx");

            LinkButton lb=(LinkButton)(Master.FindControl("LinkButton1"));
            lb.Text = "Welcome " + Session["loggedinloginid"].ToString()+"| Log Out |";
            lb.Click += new EventHandler(lb_Click);
        }

        void lb_Click(object sender, EventArgs e)
        {
            Session.Clear();
            Response.RedirectPermanent("WebForm2.aspx");
            //throw new NotImplementedException();
        }

问题是,当我注销并清除会话并在浏览器中输入要保护的页面的 URL(带有此代码的页面)时,它会打开!为什么以及如何避免这种情况?

4

4 回答 4

1
  Session.Abandon();

删除存储在 Session 中的所有对象。如果您不显式调用 Abandon 方法,则服务器会在会话超时时删除这些对象并销毁会话。

查看此链接以了解清除,放弃之间的区别

Session.Abandon() 和 Session.Clear() 有什么区别

于 2012-12-29T09:33:33.747 回答
0

您可以使用 Session.Remove() 方法;

Session.Remove("会话名称");

于 2012-12-29T09:24:03.547 回答
0

您在该页面重定向完成到“WebForm2.aspx”后删除会话。您在“Webform3.aspx”页面中编写会话删除功能。并重定向到登录页面后。并且您还检查了 webconfig 文件。

于 2012-12-29T10:45:07.930 回答
0

您的问题出在这一行:

   lb.Click += new EventHandler(lb_Click);

Click-EventHandler 的代码永远不会被调用,因为您在 OnLoad-Event 中订阅了 EventHandler,但这在生命周期中为时已晚。将该行移动到 OnInit-Event 中,您的代码应该可以按预期工作。

您还应该考虑清理您的 SQL 查询以防止 SQL 注入(我不知道您的登录名是什么样的,但根据您上面发布的代码,它可能容易受到 SQL 注入的攻击)。

如果您可以选择 .net 3.5 或更高版本,我建议您查看简单的 ORM-Mapper,例如 Linq2SQl 或 EntityFramework(首先查看 Linq2SQL),它们允许您使用 LINQ 进行查询和(afaik)sanatize你的输入。

于 2013-01-05T09:58:54.030 回答