【发布时间】:2021-06-01 06:29:51
【问题描述】:
好吧,我一直在尝试构建一个简单的登录(没有那么复杂),一切正常,但不是您需要比较数据库结果和用户输入的部分。 问题来了:
if (item.user == User && item.password == Password) {
itExists = true;
break;
}
item.usuario 工作正常,用户输入也正确保存,我知道这一点,因为当我尝试与此进行比较时:
if (item.user.Contains(User) && item.password.Contains(Password)) {
itExists= true;
break;
}
它工作“很好”,“包含”的问题是当用户输入一个字母时(例如,想象如果在数据库中,用户/密码是 admin/admin 并且用户输入 a/a)它会让他登录,因为“a”包含在“admin”中
所以,我搜索了几乎所有的比较方法,并尝试了这个:
// Isn't working directly. ToString(item.user) == Convert.ToString(User) && Convert.ToString(item.password) == Convert.ToString(Password)
// Isn't working directly. item.user== User && item.password == Password
// Isn't working directly. item.user.Equals(User) && item.password.Equals(Password)
// Isn't working directly. String.Equals(item.user, User) && String.Equals(item.password, Password)
// Is working, but if u write a single letter that is in the string,
// It let u sign in. item.user.Contains(User) && item.password.Contains(Password)
我知道这些不起作用,因为使用 .Contains() 它可以让你使用正确的用户/密码登录,但我已经告诉过这个问题
我想知道为什么会发生这种情况,以及如何做到这一点。
每个变量包含:
- item.user 是 foreach 的迭代(即带来数据库用户信息)
- User是用户的输入(html表单)
完整的控制器代码在这里:
public ActionResult Index(string User, string Password) {
var UsersList= db.Users;
bool itExists= false;
foreach (var item in UserList) {
if (item.user.Contains(User) && item.password.Contains(Password)) {
itExists= true;
break;
}}
(我想我已经解释得很好,如果我没有解释的话,对不起)
提前谢谢你:)
编辑:如果重要的话,我使用的是 ASP.NET (.Net Framework 4.7.2)
【问题讨论】:
-
能分享一下if中每个变量的值吗?
-
我将编辑问题以添加这个,在我这样做的路上,谢谢你!
-
快速建议,永远不要存储纯文本密码。
-
password.Contains(Password) 意思是password代表的词包含在password代表的词中。这并不意味着密码包含在数据库中
-
首先,您是否 100% 确定字符串相等?有时那里会有不可打印的字符。它发生在我身上。
标签: c# .net string comparison