登录 asp.net 后如何检索当前用户的用户名
本文关键字:用户 检索 net asp 何检索 登录 | 更新日期: 2023-09-27 17:55:14
我需要在登录后获取用户当前名称。我需要在页面中显示名称,例如欢迎用户。请帮助我,我当前的代码如下
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";
}
}
}
如果您使用的是 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
}
}
Member.GetUser()。成员资格提供程序中的用户名。 在任何情况下,您都不应运行那里的代码。 它要求黑客攻击。 您不应该将密码加载到内存中,并且由于遍历所有用户而获得更多用户,因此会遇到性能问题!
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>
您应该能够从代码隐藏中的 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
将用户名放在会话中
Session["username"] = dr[0].ToString();
然后在另一页上
if Session["username"] != null
{
String username = Session["username"].ToString();
}
else
{
Page.Redirect("login.aspx");
}
您可以检查每个不同的页面
理想情况下,应使用内置的 ASP.NET 窗体身份验证 - 有关快速入门,请参阅此文章。谈到您的问题,成功登录后,您应该使用诸如
FormsAuthentication.RedirectFromLoginPage(txt_name.Text, true);
这会将用户名存储到身份验证 cookie 中,随后可以使用代码(例如 User.Identity.Name
)进行检索,您可以在页面中的任何位置使用。
您可以将用户名存储在会话对象中,并在存在会话时在应用程序中的任何位置获取用户名
但是您还必须更新查询,您调用的方式不是好方法
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();
}
您应该从一些教程中了解更多信息:
- http://csharp-station.com/Tutorial/AdoDotNet/Lesson01
- MSDN
..如果您只想使用 User
对象:
var username = User.Identity.Name;