• 登录使用cookies记住密码


            UsersBLL bll = new UsersBLL();
            private void AutoLogin()
            {
                if (Request.Cookies["loginId"] != null && Request.Cookies["pwd"] != null && Request.Cookies["id"] != null)
                {
                    int cookId = Convert.ToInt32(Request.Cookies["id"].Value);
                    string cookLoginId = Request.Cookies["loginId"].Value;
                    string cookPwd = Request.Cookies["pwd"].Value;
                    UserInfo model = bll.GetUserById(cookId);
                    if (model != null)
                    {
                        string sysPwd = WebComm.MD5Str(model.LoginPwd, cookPwd.Substring(0, 2));
                        if (model.LoginId == cookLoginId && sysPwd == cookPwd)
                        {
                            GoPage(model);
                        }
                    }
                }
            }
    
            protected void btLogin_Click(object sender, EventArgs e)
            {
                UserInfo model = bll.GetUser(txtUserLogin.Text.Trim(), WebComm.MD5Str(txtPwd.Text.Trim()));
                if (model == null)
                {
                    JScript.Alert(this, "用户名或者密码错误!");
                    return;
                }
                //用户勾选记住密码后执行
                if (checkPwd.Checked)
                {
                    string dbcookPwd = WebComm.MD5Str(model.LoginPwd, null);
                    HttpCookie cookId = new HttpCookie("id", model.Id.ToString());
                    HttpCookie cookLoginId = new HttpCookie("loginId", model.LoginId);
                    HttpCookie cookPwd = new HttpCookie("pwd", dbcookPwd);
                    cookId.Expires = DateTime.Now.AddMonths(1);
                    cookLoginId.Expires = DateTime.Now.AddMonths(1);
                    cookPwd.Expires = DateTime.Now.AddMonths(1);
                    Response.Cookies.Add(cookLoginId);
                    Response.Cookies.Add(cookPwd);
                    Response.Cookies.Add(cookId);
                }
                GoPage(model);
            }
            
            private void GoPage(UserInfo model)
            {
                Session["id"] = model.Id;
                Session["loginId"] = model.LoginId;
                Session["name"] = model.Name;
                string url = "~/Default.aspx";
                if (Request.QueryString["return"] != null)
                {
                    url = Request.QueryString["return"];
                }
                Response.Redirect(url);
            }

    应用到的方法

            #region MD5 加密字符串 +string MD5Str(string str)
            /// <summary>
            /// MD5 加密字符串
            /// </summary>
            /// <param name="rawPass">源字符串</param>
            /// <returns>加密后字符串</returns>
            public static string MD5Str(string str)
            {
                // 创建MD5类的默认实例:MD5CryptoServiceProvider
                MD5 md5 = MD5.Create();
                byte[] bs = Encoding.UTF8.GetBytes(str);
                byte[] hs = md5.ComputeHash(bs);
                StringBuilder sb = new StringBuilder();
                foreach (byte b in hs)
                {
                    // 以十六进制格式格式化
                    sb.Append(b.ToString("x2"));
                }
                return sb.ToString();
            }
            #endregion
    
            #region 返回 对字符串MD5之后 加上随机生成的盐值之后 再MD5 的字符串 +string MD5Str(string str, string salt)
            /// <summary>
            /// 返回 对字符串MD5之后 加上随机生成的盐值之后 再MD5 的字符串
            /// </summary>
            /// <param name="str"></param>
            /// <param name="salt">如果为null,则为字符串进行两次MD5加密算法</param>
            /// <returns></returns>
            public static string MD5Str(string str, string salt)
            {
                if (salt == null)
                {
                    Random r = new Random();
                    salt = ((char)r.Next(65, 91)).ToString() + ((char)r.Next(65, 91)).ToString();
                }
                return salt + MD5Str(salt + MD5Str(str));
            }
            #endregion


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    递归算法
    抽象类(abstract class)和接口(interface)
    静态变量和实例变量
    java 工厂化生产
    win10安装使用ffmpeg+python中使用ffmpy
    C++ Concurrency in Action 读书笔记三:并发操作的同步
    C++ Concurrency in Action 读书笔记二:用mutex互斥锁保护在线程间共享的数据
    C++ Concurrency in Action 读书笔记一:thread的管理
    C++正则表达式 <regex>
    CMake使用Boost
  • 原文地址:https://www.cnblogs.com/ful1021/p/4804479.html
Copyright © 2020-2023  润新知