Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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_Logout_Asp.net Session - Fatal编程技术网

C# 如何注销用户(使用会话)

C# 如何注销用户(使用会话),c#,asp.net,logout,asp.net-session,C#,Asp.net,Logout,Asp.net Session,我想知道如何使用ASP.NET从C#中的会话中注销用户。我正在使用SQL Server检索用户登录时的用户名(下面的第二段代码) 下面是我的aspx页面中登录按钮的代码 protected void btnLogin_Click(object sender, EventArgs e) { string email = txtEmail.Text; string password = txtPassword.Text;//AQUIRE EMAIL AND PASSW

我想知道如何使用ASP.NET从C#中的会话中注销用户。我正在使用SQL Server检索用户登录时的用户名(下面的第二段代码) 下面是我的aspx页面中登录按钮的代码

protected void btnLogin_Click(object sender, EventArgs e)
{
        string email = txtEmail.Text;
        string password = txtPassword.Text;//AQUIRE EMAIL AND PASSWORD AND ADD TO STRINGS

        SqlDataReader dataread = null;

        SQLconn.Open();
        SqlCommand chkLogin = new SqlCommand("SELECT * FROM Member WHERE Email='" + email + "' AND Password='" + password + "'", SQLconn);
        dataread = chkLogin.ExecuteReader();
        SqlCommand nameAdd = new SqlCommand("SELECT Name FROM Member WHERE Email='" + email + "'", SQLconn);

        if (dataread.Read())
        {
            Response.Write("You are logged in");

            Session.Add("userID", dataread[0].ToString());
            Session.Add("userFName", dataread[1].ToString());
            Session.Add("userEmail", dataread[3].ToString());

            Response.Redirect("~/Profiles.aspx");
        }
        else
        {
            Response.Write("Please try again. Usernames and Passwords do not match.");
        }
        SQLconn.Close();
    } 
当他们登录时,他们被重定向到另一个页面。下面是该页面的代码

if (Session.Count > 0)
{
    if (Session.Count > 0)
    {
                string name = (string)Session["userFName"];
                txtGreeting.Visible = true;
                txtGreeting.Text = "Welcome " + name + " , you are logged in! ";
    }
}

您使用会话登录/注销的方式不正确,但如果您只是在单击注销时尝试删除用户,请执行以下操作:

Session["userFName"] = null; //the other session vars related to user as well
建议:至少考虑表单身份验证或令牌身份验证。会话可能被劫持,您正在打开应用程序进行攻击。

您可以使用 Session.Clear();方法,当用户单击注销按钮(如果您有)时

在你的电脑上,这个方法

if (Session.Count > 0)
{
if (Session["username"] != null)
{
            string name = (string)Session["userFName"];
            txtGreeting.Visible = true;
            txtGreeting.Text = "Welcome " + name + " , you are logged in! ";
}
else{
Response.Redirect(Logout.aspx);
}
}

再添加一个条件以检查会话是否有内容。

使用try/catch或
使用
语句处理SqlConn、SqlDataReader等。这是我正在创建的一个本地项目,不会有任何用户需要妥协。请参阅@nelek您可能需要进行更多研究。使用.Clear()或.RemoveAll()将清除所有会话变量,而不仅仅是用户信息。是的,它将清除,这就是用户注销的时间点。。。特别是会话。放弃。。。阅读你的建议,第二句;)我并不是说这项研究没什么不好的。没有难受的感觉。