自动登录、记住我(保存登陆状态)实现

自动登录、记住我(保存登陆状态)实现:
保存在客户端
不能用session,可以用cookies保存

实现方式:
第一种方法:
可以把SessionId(GUID)放到cookies中,但

这样为了让用户下次访问我们网站时,知道这

个sessionId对应的是哪一个用户,我们还要在

数据库中建张表。
表字段:
主键,UserId  SessionId  时间

缺点:不能在两台机器上同时保存

第二种方法:
把UserId放cookies中  密码(加密)
相对于第一种方法优点:多台机器可以保存
缺点:不安全,密码放到了客户端。

第二种方法实现代码:

页面加载读取Cookie判断,正确写入Session,转向

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Request.Cookies["cUser"] != null && Request.Cookies["cPwd"] != null)
                {
                    string cUser = Request.Cookies["cUser"].Value;
                    string cPwd = Request.Cookies["cPwd"].Value;

string sqlPwd = "";
                    BookShop.Model.User oneUser = bll.Exists(cUser);
                    if (oneUser != null)
                    {
                        #region MyRegion
                        //说明存在cUser
                        if (cPwd.Length > 2)//防止用户修改Cookie中的密码报错
                        {
                            string salt = cPwd.Substring(0, 2);
                            sqlPwd = oneUser.LoginPwd;

sqlPwd = Encrypt(sqlPwd, salt);
                            if (cPwd == sqlPwd)
                            {
                                //保存Session状态
                                Session["user"] = oneUser;
                                //转向
                                #region MyRegion
                                if (Request.QueryString["returnUrl"] == null)
                                {
                                    //登陆成功,转向首页
                                    Response.Redirect("/member/ShowMessage.aspx?returnUrl=" + Server.UrlEncode("/Default.aspx") + "&msg=" + Server.UrlEncode("自动登陆成功") + "&txt=" + Server.UrlEncode("转向首页"));

}
                                else
                                {
                                    //登陆成功,转向上次访问页面
                                    string returnUrl = Request.QueryString["returnUrl"];
                                    Response.Redirect(returnUrl);
                                }
                                #endregion
                            }
                        }
                        #endregion

}
                    //如果Cookies出错...清除cookie
                    ClearLoginCookie();
                }

}

}

//页面登陆

protected void btnLogin_Click(object sender, ImageClickEventArgs e)
        {
            if (!Page.IsValid)
            {
                return;
            }
            string uid = txtLoginId.Text.Trim();
            string pwd = txtLoginPwd.Text.Trim();
            BookShop.Model.User oneUser;
            UserManager bll = new UserManager();
            bool result = bll.Login(uid, pwd, out oneUser);
            if (result)
            {
                //保存session
                Session["user"] = oneUser;

//保存Cookie状态
                if (cbAutoLogin.Checked)
                {
                    HttpCookie cUser = new HttpCookie("cUser", uid);
                    HttpCookie cPwd = new HttpCookie("cPwd", Encrypt(oneUser.LoginPwd));
                    cUser.Expires = DateTime.Now.AddYears(10);
                    cPwd.Expires = DateTime.Now.AddYears(10);
                    Response.Cookies.Add(cUser);
                    Response.Cookies.Add(cPwd);
                }

if (Request.QueryString["returnUrl"] == null)
                {
                    //登陆成功,转向首页
                    Response.Redirect("/Default.aspx");
                }
                else
                {
                    //登陆成功,转向上次访问页面
                    string returnUrl = Request.QueryString["returnUrl"];
                    Response.Redirect("/member/ShowMessage.aspx?returnUrl=" + HttpContext.Current.Server.UrlEncode(returnUrl) + "&msg=" + Server.UrlEncode("登陆成功") + "&txt=" + Server.UrlEncode("转向上次访问页面"));
                }

}
            else
            {
                //登陆失败,提示错误信息
                Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert(‘用户名或密码错误!‘);", true);
            }

}

/// <summary>
        /// 对密码进行MD5加密
        /// </summary>
        /// <param name="pwd"></param>
        /// <returns></returns>
        protected string Encrypt(string pwd)
        {
            return Encrypt(pwd, null);
        }

/// <summary>
        /// MD5加密方法扩展
        /// </summary>
        /// <param name="pwd"></param>
        /// <returns></returns>
        protected string Encrypt(string pwd, string salt)
        {
            //加密规则: salt+md5(salt+md5(pwd+"zfx"))

MD5 md5 = MD5.Create();//MD5加密方法
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(pwd + "zfx");
            buffer = md5.ComputeHash(buffer);
            string str = "";
            for (int i = 0; i < buffer.Length; i++)
            {
                str += buffer[i].ToString("X2");
            }

if (salt == null)
            {
                Random r = new Random();
                salt = ((char)(r.Next(65, (65 + 26)))).ToString() + ((char)(r.Next(65, (65 + 26)))).ToString();
            }
            str = salt + str;
            str = CommenCodes.CommenCodes.Md5(str); //调用其他类库中 MD5实现方法,具体实现见本方法之前
            return (salt + str);
        }

/// <summary>
        /// (在服务器端)清除客户端cookie
        /// </summary>
        private void ClearLoginCookie()
        {
          //在服务器端清除客户端cookie
            HttpCookie cUser = new HttpCookie("cUser");//新建两个跟之前同名的cookie,用于覆盖客户端的cookie
            HttpCookie cPwd = new HttpCookie("cPwd");
            cUser.Expires = DateTime.Now.AddYears(-10);//设置过期时间为过期
            cPwd.Expires = DateTime.Now.AddYears(-10);
            Response.Cookies.Add(cUser);
            Response.Cookies.Add(cPwd);
       
        }

自动登录绝对不安全,有安全隐患
进入网站后,对于关键步骤再次要求用户输入密码

时间: 2024-08-28 19:48:43

自动登录、记住我(保存登陆状态)实现的相关文章

SharedPreferences实现自动登录记住用户名密码

最近Android项目需要一个自动登录功能,完成之后,特总结一下,此功能依靠SharedPreferences进行实现. SharedPreferences简介 SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data/data/<包名>/shared_prefs目录下.SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现

Jquery 实现 “下次自动登录” 记住用户名密码功能

转载自:http://blog.csdn.net/aspnet_lyc/article/details/12030039?utm_source=tuicool&utm_medium=referral Jquery将用户名密码存储到cookie中 需要导入jquery.js和jquery.cookie.js <html> <head> <title>test cookie</title> <script src="Scripts/jqu

Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)

原文:http://blog.csdn.net/liuyiming_/article/details/7704923 SharedPreferences介绍: SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置参数,它是采用xml文件存放数据的,文件存放在"/data/data<package name>/shared_prefs"目录下. SharedPreferences的用法: 由于SharedPreferences是

Android自动登录与记住密码

// 获取实例对象 sp = this.getSharedPreferences("userInfo", Context.MODE_WORLD_READABLE); rem_pw = (CheckBox) findViewById(R.id.cb_mima); auto_login = (CheckBox) findViewById(R.id.cb_auto); // 判断记住密码多选框的状态 if (sp.getBoolean("ISCHECK", false))

Android记住密码自动登录的实现

我采用的是SharedPreferences来存取数据的,所以先简单的介绍一下SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置参数,它是采用xml文件存放数据的,文件存放在"/data/data<package name>/shared_prefs"目录下. 获取SharedPreferences的两种方式: 1 调用Context对象的getSharedPreferences()方法

记住密码和自动登录界面的实现(五)

你不能左右天气,但可以改变心情.你不能改变容貌,但可以掌握自己.你不能预见明天,但可以珍惜今天. 本讲内容:记住密码和自动登录界面的实现 示例效果图      下面是res/layout/activity_login.xml 布局文件:(登录介面) <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com

基于localStorge开发登录模块的记住密码与自动登录

前沿||我是乐于分享,善于交流的鸟窝 先做写一篇关于登录模块中记住密码与自动登录的模块.鸟窝微信:jkxx123321 关于这个模块功能模块的由来,这是鸟大大的处女秀,为什么这么说呢?一天在群里,一个哥们说有私活,开发一个****模块,我那天手痒痒就和他聊了两句,然后,就决定给她做这个模块了,和他谈了谈交付时间,他说最迟两天,然后谈了谈加个,最后达成,500¥!!!这个模块其实第一天晚上我就开发出来了,那时我给他微信说,功能模块开发ok了,要不要远程查看一下,没问题的话就交了,一会他回我,好了就

(转)业务系统实现记住密码和自动登录功能

公司的业务系统本来是受域控的,用户不需要登录可以直接访问系统.当然,虽然不用人工登录,系统本身会读取电脑的用户名为登录标识,对系统操作权限和记录也是以电脑名.近段时间,由于系统要牵到云端,也就是不受域控了,那就需要每人手头上都有账号和密码了,这个和一般的业务系统没什么区别.但是由于用户之前的习惯是不用登录的,而且每天打开关闭的次数较多.OK,一般的系统登录都会有个记住密码的功能,但是,这还满足不了用户的需求,那么我们给用户增加多一个自动登录功能,类似QQ那样,我上次访问勾选了自动登录功能,然后再

自动登录 登陆成功那个alert遮盖一直存在bug

手动登陆的时候,登陆成功MBProgressHUD message:@"登陆成功" 然后再dispatch_after 里调用MBProgressHUD hideHUD隐藏可以成功.问题来了,写了自动登陆,NSUserDefaults 配置完,然后[self login]登陆,能push下一个控制器,但是登陆成功的遮蔽一直在,不会取消.在[MBProgressHUD hideHUD]方法那里打了断点,依旧..这是为什么? 登陆成功那个alert一直在 手动登录代码无问题 自动登录 登陆