How to store login user id in asp.net?
我刚接触ASP.NET。我的问题是如何在ASP.NET Web窗体中保存登录用户ID?我在ASP.NET WebForm中编写的代码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| foreach (var s in db.Users)
{
if (tbUserName.Text==s.user_name && tbPassword.Text == s.user_password)
{
if (string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
{
FormsAuthentication.SetAuthCookie(tbUserName.Text, false);
Response.Redirect("~/");
}
else
{
FormsAuthentication.RedirectFromLoginPage(tbUserName.Text, false);
}
flag = 1;
break;
}
else
flag=0;
}
if(flag==0)
{
tbUserName.ErrorText ="Invalid user";
tbUserName.IsValid = false;
}
} |
- 如果您使用的是内置功能,这是自动的。我想是user.identity.name。
- user.identity.name.名称。返回用户名而不是ID。
- 首先,您的密码应该加密。第二,在设置cookie时,插入用户名而不是用户名。
正如蒂姆所说,你可以用
您还可以从同一对象获取authenticationType和isauthenticated属性。
一个建议是不要为所有的用户查询您的数据库,然后通过它们循环找到正确的用户。根据用户输入,您应该为唯一一个与表单发布匹配的用户查询数据库。
根据您所写的内容,看起来密码是明文的,而不是加密的,这是一个巨大的安全问题。作为.NET的新手,请看一下.NET成员资格提供程序或simplemembership或类似的模式。
祝你好运!
我建议您考虑使用Session对象来存储用户ID。Session将在该用户的站点会话期间可用。因此,您可以在站点代码的任何地方调用Session,以引用该用户ID。
例如,若要存储ID,只需执行此操作,就可以假设我们在页面加载()中。
Session["UserId"] = userID // Or wherever you get the ID from.
然后,在您的代码隐藏中,您可以这样做:
string userId = Session["UserId"]
如果用户ID是一个数字,比如说一个int,那么您需要转换用户ID:
1 2 3
| int userId = 0;
int.TryParse(Session["UserID"], out userID) |
到会话的快速脏链接示例:
http://asp.net-tutorials.com/state/sessions/会话/
- 在哪里写Session["UserId"] = userID?
- 嗯,我假设用户ID是一个数字。然而,正如其他人指出的,如果用户ID是该用户的名称,那么您可以使用User.Identity.Name,而不是使用Session。
- 没有userid是数字:(
- 啊哈,好酷。所以使用Session对你来说仍然是一个有效的想法。
- 它说:错误22当前上下文中不存在名称"userid"
- 您必须首先通过调用Session["UserId"] = userID为Session中的UserID创建一个条目。我认为您可能刚刚尝试过int userId = Session["UserID"],其中"userid"还没有出现在会话中。
- 您的解决方案是否需要跨多个Web头实现负载平衡?如果是这样,会话可能不是您的最佳选择。
- 诚然,在负载平衡方面使用Session有一些警告,这本身就是一个大主题。不过,在其他会话中,如何存储userid?我想帮助问题的作者将所有选项。
- 在收到请求时,您可以检查您的用户,如果存储ID很重要,请将其添加到httpcontext.items字典中。这个选项不会在负载平衡中崩溃。另外,如果用户注销,则不需要任何特殊的会话清除逻辑,当请求超出范围时,将释放items集合。
- 啊,httpcontext.items,忘了这一点。
- Jason和Doug-见The redirect generates a new HttpContext which is why the items in it are lost - the redirect effectively tells the browser the next URL to request, and when it does it loses the context of the previous request that triggered the redirect.The session persists across requests (typically using a sessionID cookie to tie the user to values on the server), and is thus still available.stackoverflow.com/questions/16697601/…-那么我应该去sessionor httpcontext.items存储userid?