无法完全清除会话

时间:2012-12-29 09:09:50

标签: c# asp.net session-variables

我正在使用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 个答案:

答案 0 :(得分:1)

  Session.Abandon();

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

查看此链接,了解clear,abandon

之间的区别

What is the difference between Session.Abandon() and Session.Clear()

答案 1 :(得分:0)

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

Session.Remove(“会话名称”);

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你的问题在这一行:

   lb.Click += new EventHandler(lb_Click);

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

您还应该考虑对SQL查询进行Sanatizing以防止SQL注入(我不知道您的登录方式如何,但根据您上面发布的代码,它可能容易受到SQL注入的攻击)。

如果.net 3.5或更高版本是您的选项,我建议您查看简单的ORM-Mappers,如Linq2SQl或EntityFramework(首先查看Linq2SQL),它允许您使用LINQ进行查询和( afaik)对你的意见进行审查。