当前位置:编程学习 > C#/ASP.NET >>

为什么登陆时总显示密码错误,密码与数据库内的完全一致啊

我的确是菜鸟,希望高手帮我解决下,谢谢 以下是 登陆的login.aspx.cs文件的代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using OnLineExam.BusinessLogicLayer;

public partial class Web_Login : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {                   
            if (!Object.Equals(Request.Cookies["UserID"], null))
            {
                HttpCookie readcookie = Request.Cookies["UserID"];
                this.txtUserID.Text = readcookie.Value;
            }
        }
       
    }
    //登录按钮事件
    protected void imgBtnLogin_Click(object sender, ImageClickEventArgs e)
    {
        Users user = new Users();//创建Users对象user
        string pwdMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPwd.Text.Trim(), "MD5").ToString();
        if (String.Compare(Request.Cookies["yzmcode"].Value, Validator.Text, true) != 0)
        {
            lblMessage.Text = "验证码错误!";
        }
        else
        {
            if (user.CheckPassword(txtUserID.Text.Trim()))//根据用户编号查询用户密码
            {
                if (user.UserPwd == pwdMd5)//输入密码与用户密码相同
                {
                    if (object.Equals(Request.Cookies["UserID"], null))
                    {
                        CreateCookie();
                    }
                    else
                    {
                        CreateCookie();
                    }  
                     Session["userID"] = txtUserID.Text.Trim();//存储用户编号
                     Response.Redirect("Default.aspx");//转向管理员操作界面                      
                }
                else//密码错误,给出提示
                {
                    lblMessage.Text = "您输入的密码错误!";
                }
            }
            else//用户不存在,给出提示
            {
                lblMessage.Text = "该用户不存在!";
            }
        }
    }
    protected void ChangeCode_Click(object sender, EventArgs e)
    {

    }
    private void CreateCookie()
    {
        HttpCookie cookie = new HttpCookie("UserID");
        if (this.cbxRemeberUser.Checked)
        {
            cookie.Value = this.txtUserID.Text;
        }
        cookie.Expires = DateTime.MaxValue;
        Response.AppendCookie(cookie);
    } 

}

--------------------编程问答-------------------- 你确定pwdMd5 这个string的值和你数据库中的一至? --------------------编程问答-------------------- 这种问题与其去问,不如自己动手调试下。 --------------------编程问答-------------------- 断点调试看看 --------------------编程问答-------------------- 建议调试看看,是不是SQL语句写错了! --------------------编程问答-------------------- 或者是数据库连接的时候出错了,你没捕捉到。 --------------------编程问答-------------------- 怎么看是否一致呢,谢谢
引用 1 楼 hrabeyond 的回复:
你确定pwdMd5 这个string的值和你数据库中的一至?
--------------------编程问答-------------------- md5加密过后 你在数据库里头还认识他? --------------------编程问答--------------------      你添加一个用户的时候有没有用 tirm() 方法`  --------------------编程问答-------------------- 数据库连接时没有问题的,各位能不能说的具体点呢,非常感谢 --------------------编程问答-------------------- - -看情况是LZ没有下完整源码造成的。。 --------------------编程问答-------------------- tirm()应该没有 --------------------编程问答-------------------- 登陆Id 也能识别  验证码也能识别就是 密码识别不了  汗 --------------------编程问答-------------------- cstr(trim())  加这个
--------------------编程问答-------------------- 如何用啊  谢谢
引用 13 楼 wofel 的回复:
cstr(trim()) 加这个
--------------------编程问答-------------------- 你不都说了“密码与数据库的完全一致”么?你的密码是什么?数据库里的是什么?怎么个一致法?也不说明白 --------------------编程问答-------------------- 可能是由于空格造成的吧。。看你数据库存储密码的类型是不是变长的,看加var没有,如果没有加,取出来的password先trim再比较 --------------------编程问答--------------------
引用 15 楼 hrabeyond 的回复:
你不都说了“密码与数据库的完全一致”么?你的密码是什么?数据库里的是什么?怎么个一致法?也不说明白

数据库就是这个 ,谢谢 --------------------编程问答-------------------- .......... --------------------编程问答-------------------- 就我分析吧,你说你的密码和数据库中的一致,而我问你pwdMd5这个值的时候,你说你不知道,所以你数据库中的值可能是没经过MD5处理的,当然和pwdMd5这个值对不上,当然说你密码错误了 --------------------编程问答-------------------- 哦,谢谢,我是不是要处理下 数据库里的数据 用md5,在用处理过的 登陆吧?
引用 19 楼 hrabeyond 的回复:
就我分析吧,你说你的密码和数据库中的一致,而我问你pwdMd5这个值的时候,你说你不知道,所以你数据库中的值可能是没经过MD5处理的,当然和pwdMd5这个值对不上,当然说你密码错误了
--------------------编程问答-------------------- 你数据库里的密码字段的值,要和你程序里的处理方式对应
即System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPwd.Text.Trim(), "MD5").ToString();这个处理结果。你可以先输入密码,然后断点到这句话上,把处理过的值复制下来,粘到数据库中的密码字段就可以了 --------------------编程问答-------------------- 大小写区分 --------------------编程问答-------------------- 1.先调试,看是否真的与数据库中的一致,
2.如果一致,看是不是数据库中存在空格,
3.把sql语句调试显示出来,到查询分析器中去运行,看是否能查到值 --------------------编程问答-------------------- 两者都输出来看一下对不对呗 --------------------编程问答-------------------- 在往数据库里存数据时,用MD5进行加密;但是也要记得在从数据库里读取数据时,要进行解密呀!如果在数据库里存的是加过密的暗文,那你从数据库里读取的时候肯定与原来的明文密码不一样了。
要不你不用加密方法,直接存取,试一下还有没有问题...... --------------------编程问答-------------------- 我也遇到过这个问题,我的问题是因为数据库字段定义时用的"char",如果输入的内容位数小于字段定义的位数,会在后面自动添加空格,我在读出密码字段后直接与画面输入的比较,所以认为不一致,因为数据库读出来的有空格,用眼睛看是一样的。

我当时在向数据库写数据和从数据库读数据时,都去首尾空格,我的想法是人家密码要是就像用空格怎么办?

我的问题的解决方法是:改变数据库字段定义的类型,将"char"改成"varchar"

char:固定长度,如果内容长度不够,自动填空格补充位数
varchar:变长,不自动填空格

以上是我问题的解决方法,希望对你有帮助。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,