Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用c验证来自数据库的登录输入_C#_Asp.net - Fatal编程技术网

C# 使用c验证来自数据库的登录输入

C# 使用c验证来自数据库的登录输入,c#,asp.net,C#,Asp.net,我有一个aspx登录页面login.aspx,它使用用户名和密码。提交表单时,action属性重定向到另一个pagevalidator.aspx,我只想将其与数据库凭据进行比较,并验证其是否正确。成功后,我想重定向到主页,否则显示警报消息无效凭据 下面是我在validator.aspx页面中的代码: 请注意,出于某些原因,我没有使用代码隐藏。因此使用这个aspx页面 <%@ Page Title="" Language="C#" MasterPageFile="~/project/Mast

我有一个aspx登录页面login.aspx,它使用用户名和密码。提交表单时,action属性重定向到另一个pagevalidator.aspx,我只想将其与数据库凭据进行比较,并验证其是否正确。成功后,我想重定向到主页,否则显示警报消息无效凭据

下面是我在validator.aspx页面中的代码: 请注意,出于某些原因,我没有使用代码隐藏。因此使用这个aspx页面

<%@ 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和验证算法。无法在群集中使用自动生成。删除母版页解决了此问题。谢谢你的帮助!