Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法完全清除会话_C#_Asp.net_Session Variables - Fatal编程技术网

C# 无法完全清除会话

C# 无法完全清除会话,c#,asp.net,session-variables,C#,Asp.net,Session Variables,我正在ASP.NET中使用c#和MSSQL DB开发一个应用程序。我使用的是一个简单的逻辑,如果会话变量包含适当的值,那么页面应该打开,否则它应该重定向到登录页面。这就是正在运行的代码 protected void Page_Load(object sender, EventArgs e) { if(Session["loggedinloginid"]==null || Session["loggedinpassword"]==null)

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

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(包含此代码的页面)时,它会打开!为什么以及如何避免这种情况?

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

会话。删除(“会话名称”)

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

会话。删除(“会话名称”)

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

查看此链接以了解清除和放弃之间的差异

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

查看此链接以了解清除和放弃之间的差异


在页面重定向完成到“WebForm2.aspx”后,您将删除会话。您可以在“Webform3.aspx”页面中编写会话删除函数。然后重定向到登录页面。您还可以检查webconfig文件。

在页面重定向完成到“WebForm2.aspx”后删除会话。您可以在“Webform3.aspx”页面中编写会话删除函数。然后重定向到登录页面。您还可以检查webconfig文件。

您的问题在这一行:

   lb.Click += new EventHandler(lb_Click);
永远不会调用Click EventHandler的代码,因为您在OnLoad事件中订阅了EventHandler,但这在生命周期中太晚了。将该行移到OnInit事件中,您的代码将按预期工作

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


如果您可以选择.net 3.5或更高版本,我建议您使用简单的ORM映射器,如Linq2SQl或EntityFramework(先看一下Linq2SQl),它允许您使用LINQ进行查询并(afaik)对输入进行sanatize处理。

您的问题在这一行:

   lb.Click += new EventHandler(lb_Click);
永远不会调用Click EventHandler的代码,因为您在OnLoad事件中订阅了EventHandler,但这在生命周期中太晚了。将该行移到OnInit事件中,您的代码将按预期工作

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


如果您可以选择.net 3.5或更高版本,我建议您查看简单的ORM映射程序,如Linq2SQl或EntityFramework(首先查看Linq2SQl),它允许您使用LINQ进行查询并(afaik)对输入进行sanatize。

此页面是否有某种缓存?在浏览器上,这是浏览器带来的缓存版本?我希望这不是生产代码。@Aristos:我不认为缓存导致了这一点,因为它也尝试刷新页面,页面保持不变!我还尝试在Chrome浏览器中隐姓埋名,在Mozilla Firefox中进行私人浏览。这个页面有缓存吗?在浏览器上,这是浏览器带来的缓存版本?我希望这不是生产代码。@Aristos:我不认为缓存导致了这一点,因为它也尝试刷新页面,页面保持不变!我还尝试在Chrome浏览器中隐姓埋名,在Mozilla Firefox中进行私人浏览。我已经这样做了,但也没用
Session.Clear()
是一种强度更高的方法。您是否尝试过此会话[“Session name”]=null;我已经这么做了,但也没用
Session.Clear()
是一种强度更高的方法。您是否尝试过此会话[“Session name”]=null;这意味着要重定向到logout.aspx页面,在该页面中执行Session remove功能,如Session.clear()或Session.advand(),然后重定向到login.aspx页面。好的,我会尝试发回。这意味着要重定向到logout.aspx页面,在该页面中执行Session remove功能,如Session.clear()或Session.advand()然后你重定向到login.aspx页面。好的,我会尝试发回。如果这个处理程序中的代码没有被调用,那么页面为什么会被重定向?如果这个处理程序中的代码没有被调用,那么页面为什么会被重定向?