C# 使用c验证来自数据库的登录输入
我有一个aspx登录页面login.aspx,它使用用户名和密码。提交表单时,action属性重定向到另一个pagevalidator.aspx,我只想将其与数据库凭据进行比较,并验证其是否正确。成功后,我想重定向到主页,否则显示警报消息无效凭据 下面是我在validator.aspx页面中的代码: 请注意,出于某些原因,我没有使用代码隐藏。因此使用这个aspx页面C# 使用c验证来自数据库的登录输入,c#,asp.net,C#,Asp.net,我有一个aspx登录页面login.aspx,它使用用户名和密码。提交表单时,action属性重定向到另一个pagevalidator.aspx,我只想将其与数据库凭据进行比较,并验证其是否正确。成功后,我想重定向到主页,否则显示警报消息无效凭据 下面是我在validator.aspx页面中的代码: 请注意,出于某些原因,我没有使用代码隐藏。因此使用这个aspx页面 <%@ Page Title="" Language="C#" MasterPageFile="~/project/Mast
<%@ Page Title="" Language="C#" MasterPageFile="~/project/MasterPage.master" %>
<%@ Import Namespace="System.Collections" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<script runat="server">
private SqlConnection conn;
private SqlCommand cmd;
string uname, upass;
protected void page_Load(object sender, EventArgs e)
{
uname = Request.QueryString["name"];
upass = Request.QueryString["pass"];
string connectionString = ConfigurationManager.ConnectionStrings["myconn"].ToString();
conn = new SqlConnection(connectionString);
cmd = new SqlCommand("", conn);
cmd.Parameters.Add("@username", SqlDbType.VarChar);
cmd.Parameters["@username"].Value = uname;
cmd.Parameters.Add("@password", SqlDbType.VarChar);
cmd.Parameters["@password"].Value = upass;
string query = "SELECT * FROM mydb.mytable WHERE username = @username AND password = @password";
try
{
conn.Open();
cmd.CommandText = query;
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
{
Response.Redirect("homepage.html");
}
else
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Invalid Login Credentials');", true);
}
}
finally
{
conn.Close();
}
}
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>
问题是没有发布值,我收到一条错误消息,用户名和密码需要一个值。有人能说出这个问题的解决方案吗?
另外,我想知道是否还有其他方法可以实现这种登录验证。问题是,值没有发布导致人们相信用户名和密码是通过HTTP POST提交的;但是QueryString[name]和QueryString[pass]通常与此不一致,而是表示HTTP GET 尝试改变
uname = Request.QueryString["name"];
upass = Request.QueryString["pass"];
…到
uname = Request.Form["name"];
upass = Request.Form["pass"];
…开始
另一件让我吃惊的事情是,你似乎在比较明文密码——即提交给数据库中的密码。如果您没有比较密码散列,则应该进行比较。一个开始是相关的,但肯定也有相关的内容
除此之外,您最好还是以一个独特的后续问题来探讨[是否]有其他方法来实现此登录验证-可能是因为它非常开放。我同意@J0e3gan发布的内容 但是 停止你正在做的事。。。那条路上有怪物 看起来您正在做的是将密码存储为未加密的字符串。你这样做只会带来一个痛苦的世界。 网络上有大量的资源可以帮助你找到正确的方向 基本上,启动一个新的ASP.net web表单或MVC VS 2013项目时内置了身份验证 一些你可以阅读的博客
对不起,我误用了这些词。我正在表单中使用method=get。因此我使用了QueryString。尽管如此,我还是尝试将其改为post,并使用Request.Form。但它仍然不起作用。我仍然只是在测试事情是如何运作的。因此,我比较的是明文密码。我将在稍后的阶段执行加密,当我让登录页面工作时。@newguy:这很有意义。您是否已调试以检查Request.Form-是否包含具有预期值的name和pass表单变量?再看一遍,请求看起来可疑:我怀疑您应该使用HttpContext.Current.Request.Yes。我试着像你说的那样检查。它将以下值显示为参数:ctl00$ContentPlaceholder 1$name:abc ctl00$ContentPlaceholder 1$pass:asd ctl00$ContentPlaceholder 1$submit:Login我认为它与主文件有关。我将尝试删除在本页中似乎无用的母版页。我删除了导致问题的母版页。但现在我面临一个新问题。你能帮我吗@J0e3gan此错误消息对我来说非常难以理解:-viewstate MAC验证失败。如果此应用程序由Web场或群集托管,请确保配置指定了相同的validationKey和验证算法。无法在群集中使用自动生成。删除母版页解决了此问题。谢谢你的帮助!