【问题标题】:How to logout a user (with session)如何注销用户(使用会话)
【发布时间】:2023-04-10 11:12:01
【问题描述】:

我想知道如何使用 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! ";
    }
}

【问题讨论】:

标签: c# asp.net logout asp.net-session


【解决方案1】:

你可以使用 会话.清除();用户单击注销按钮时的方法(如果有)。

在你的这个方法上

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);
}
}

再添加一个条件来检查 Session 是否有东西。

【讨论】:

    【解决方案2】:

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

    Session["userFName"] = null; //the other session vars related to user as well
    

    建议:至少查看表单身份验证或可能的令牌身份验证。会话可能被劫持,并且您正在打开您的应用程序以进行攻击。

    【讨论】:

    • @nelek 您可能需要进行更多研究。使用 .Clear() 或 .RemoveAll() 将清除所有会话变量,而不仅仅是用户信息。
    • 是的,它会的,这就是用户注销的时间点...尤其是 session.abandon... 阅读您的建议,第二个短语 ;) 我并不是说这没什么不好多研究。没有难受的感觉。
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2019-07-09
    • 2012-05-11
    相关资源
    最近更新 更多