1

我需要在登录后获取用户当前名称。我需要在页面中显示该名称,例如Welcome user。请帮助我,我当前的代码如下

protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con1"].ConnectionString);
        con.Open();
        SqlCommand cmdr = new SqlCommand("Select name,password From registration", con);
        SqlDataReader dr = cmdr.ExecuteReader();
        while (dr.Read())
        {
            if (txt_name.Text == dr[0].ToString() && txt_pass.Text == dr[1].ToString())
            {
                Response.Redirect("logout.aspx");
            }
            else
            {
                label4.Text ="Invalid Username/Password";
            }
        }

    }
4

8 回答 8

2
protected void Button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con1"].ConnectionString);
    con.Open();
    SqlCommand cmdr = new SqlCommand("Select name,password From registration", con);
    SqlDataReader dr = cmdr.ExecuteReader();
    while (dr.Read())
    {
        if (txt_name.Text == dr[0].ToString() && txt_pass.Text == dr[1].ToString())
        {
            Session["UserName"]=dr[0].ToString(); // OR Session["UserName"]=txt_name.Text;
            Response.Redirect("logout.aspx");
        }
        else
        {
            label4.Text ="Invalid Username/Password";
        }
    }

}

您可以在 HTML 中获取会话值(如果您在应用程序中使用它)

<div>
Welcome <%=HttpContext.Current.Session["UserName"]%>
</div>
于 2013-01-22T12:25:46.870 回答
2

如果您使用的是ASP.NET 成员资格

string userName = Membership.GetUser().UserName

但是,显然您没有使用它(我强烈推荐)。logout.aspx当用户成功提供他的用户名和密码时,你为什么会重定向到?

除此之外,您在查询中根本没有使用提供的信息。

SqlCommand cmdr = new SqlCommand("Select name,password From registration", con);

所以你应该使用参数来过滤正确的记录:

using(var cmdr = new SqlCommand("Select name,password From registration where name=@name and password=@password", con))
{
    cmdr.Parameters.AddWithValue("@name", userName);
    cmdr.Parameters.AddWithValue("@password", password);
    if(cmdr.ExecuteReader().HasRows)
    {
        // user + password correct
    }
    else
    {
        // user or password incorrect
    }
}
于 2013-01-22T12:13:43.890 回答
2

成员资格提供程序中的 Membership.GetUser().UserName。在任何情况下,您都不应运行那里的代码。它要求破解。您不应该将密码加载到内存中,并且由于您循环所有用户而获得更多用户,您将遇到性能问题!

于 2013-01-22T12:20:10.247 回答
1

如果会话存在,您可以将用户名存储在会话对象中并在应用程序的任何位置获取用户名

但是你也必须更新你的查询,你打电话的方式不是好方法

protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con1"].ConnectionString);
        con.Open();
        SqlCommand cmdr = new SqlCommand("Select name From registration where name = @username and password = @password", con);
        cmdr.Parameters.Add("@username", txt_name.Text.trim());
        cmdr.Parameters.Add("@password", txt_pass.Text.trim());

        SqlDataReader dr = cmdr.ExecuteReader();

        if(cmdr.ExecuteReader().HasRows)
        {
             Response.Redirect("logout.aspx");
             Session["userName"] = txt_name.Text.trim();
        }
        else{
        //Error page path
        }               
        //DOn't forget to close the connection when you Open it
      con.Close();
    }

您应该从一些教程中了解更多信息:

  1. http://csharp-station.com/Tutorial/AdoDotNet/Lesson01
  2. MSDN
于 2013-01-22T12:25:36.293 回答
1

您应该能够从User代码隐藏的属性中获取用户的身份。

myLabel.Text = User.Identity.Name;

完整的命名空间等是HttpContext.Current.User.Identity.Name.

HttpContext.User属性参考:http: //msdn.microsoft.com/en-us/library/system.web.httpcontext.user.aspx

于 2013-01-22T12:17:50.550 回答
1

将用户名放入会话中

Session["username"] = dr[0].ToString();

然后在另一页

if Session["username"] != null
{
  String username = Session["username"].ToString();
}
else
{
  Page.Redirect("login.aspx");
}

您可以检查每个不同的页面

于 2013-01-22T12:19:05.027 回答
1

理想情况下,您应该使用内置的 ASP.NET 表单身份验证 - 请参阅本文以快速入门。来到您的问题,成功登录后,您应该使用诸如

FormsAuthentication.RedirectFromLoginPage(txt_name.Text, true);

这会将用户名存储到身份验证 cookie 中,随后可以使用User.Identity.Name您可以在页面中的任何位置使用的代码来检索该 cookie。

于 2013-01-22T12:20:33.260 回答
0

..如果您只想使用该User对象:

var username = User.Identity.Name;
于 2013-01-22T12:16:50.177 回答