C# C从数据表中检索用户名和密码
我是C的新手。我正在使用VS2010和LINQ。 这是我的问题。。 我有一个登录页面,有两个文本框和确认按钮。按下按钮时,应用程序应检查表uporabniki中的用户名和密码,如果正确,则重定向 如何将所有用户名和密码存储到列表中,然后在列表中循环并检查是否匹配C# C从数据表中检索用户名和密码,c#,linq-to-sql,C#,Linq To Sql,我是C的新手。我正在使用VS2010和LINQ。 这是我的问题。。 我有一个登录页面,有两个文本框和确认按钮。按下按钮时,应用程序应检查表uporabniki中的用户名和密码,如果正确,则重定向 如何将所有用户名和密码存储到列表中,然后在列表中循环并检查是否匹配 protected void Button1_Click(object sender, EventArgs e) { WebApplication7.linqDataContext db = new WebApplicatio
protected void Button1_Click(object sender, EventArgs e)
{
WebApplication7.linqDataContext db = new WebApplication7.linqDataContext();
var users = from usr in db.uporabnikis select usr.username;
List<String> upo = new List<String>();
upo = (List<String>) users;
}
谢谢,,
Beni用户变量实现了一个名为IEnumerable的接口,其中T在您的情况下等于string
要从IEnumerable获取列表,最简单的方法是使用LINQ扩展方法ToList,因此:
您只需将检查添加到查询中,类似这样的操作即可:
WebApplication7.linqDataContext db = new WebApplication7.linqDataContext();
bool validLogin = (from usr in db.uporabnikis
where usr.username == txtUserName.Text and
usr.password == txtPassword.Text
select true).SingleOrDefault();
if(validLogin)
// Do stuff
不过,我同意上面nonnb的评论,您应该存储散列而不是纯文本密码
不要在数据库中存储密码,这很危险。存储一个散列。
首先不要获取列表,因为您已经有了一个数据库,它知道如何查找单个行。
你想要的东西更像:
var userInfo = (from usr in db.uporabnikis where usr.username == Request.Form["username"] select {usr.username, usr.passwordHash, usr.salt).FirstOrDefault();
bool loggedIn = passwordHash == HashPassword(usr.username, usr.salt, Request.Form["password"]);
等等。试试这个
protected void Button1_Click(object sender, EventArgs e)
{
WebApplication7.linqDataContext db = new WebApplication7.linqDataContext();
var users = from usr in db.uporabnikis
select usr.username,usr.password;
bool result = false;
foreach(var user in users)
{
if(user.username.Equals("usernametocheck") && user.password.Equals("passwordtocheck"))
{
result = true;
break;
}
}
if(result)
{
//code to redirect
}
else
{
//Display error
}
}
或者你可以试试这个
protected void Button1_Click(object sender, EventArgs e)
{
WebApplication7.linqDataContext db = new WebApplication7.linqDataContext();
int recordCount = 0;
recordCount = db.uporabnikis.where(x => x.username == "usernametocheck" && x.password = "passwordtocheck").Count();
if (recordCount > 0)
{
//code to redirect
}
else
{
//Display error
}
}
您确实需要使用散列存储任何密码。例如MD5,并对照它进行检查
using System.Security.Cryptography;
using (MD5 hash = MD5.Create())
{password = GetMd5Hash(hash,passwordString}
与其存储密码,为什么不存储密码的散列,然后检查散列?请不要以明文存储密码。我真的厌倦了那些对如何存储这类信息毫无头绪的人经营的网站。如果您能够检索到密码并将其显示给用户,那么您是做错了,应该不可能检索到用户的密码。您好,请快速回复thanx。我制作这个页面是为了让自己了解C.Thanx的一些简单内容,以便解决它的问题,但我想知道如何将它们存储到列表中:嘿,我从来没有注意到您可以在linq语句中像这样“选择true”。我不确定我是否喜欢它,因为我第一次读错了,但它可能会派上用场!检查md5并添加新用户..在表中存储了md5哈希。您对md5做了什么?理想情况下,它应该是用户名+密码+随机设置,或者用户名+密码+系统特有的设置。只要散列密码,攻击就可以将密码更改为密码等,并查找具有相同密码的人。
using System.Security.Cryptography;
using (MD5 hash = MD5.Create())
{password = GetMd5Hash(hash,passwordString}