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

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

  先来看看原来读取域用户的代码吧。

 string strname = HttpContext.Current.User.Identity.Name;//获取到带域名的用户
        string name = HttpContext.Current.User.Identity.Name.Substring(HttpContext.Current.User.Identity.Name.IndexOf("\\") + 1, HttpContext.Current.User.Identity.Name.Length - HttpContext.Current.User.Identity.Name.IndexOf("\\") - 1);

很多童鞋这样子获取到的是空的,是因为web.config没设置好。必须在配置文件<authentication mode="Windows">把mode的属性设为Windows,具体位置在<configuration><system.web>里面。

  好吧,下面就来实现我们的记住密码和自动登录功能吧。给大家看看登录界面吧。

先跟大家说说具体的功能吧

1、当用户勾选记住密码时,下次打开登录页面自动填充用户名和密码,用户只需点击登录按钮即可以登录,当然,你也可以删掉自动填充的密码自己重新输入,或者你用另外的用户密码登录也行。
2、当用户勾选自动登录时,记住密码也会自动被勾选上,因为只有记住了密码才会有自动登录,这是合理存在的。下次用户打开登录页面时,将会自动验证跳转到验证通过后的页面,不再需要用户去点击登录按钮。

先看看前端的简要代码,简单点把需要用到的控件和js贴出来就好了,其它布局的就不贴出来了。js简单解释一下

<form runat="server">
<input type="hidden" id="hidPass" runat="server" />
<input type="text" runat="server" id="txtLoginName" />
<asp:TextBox runat="server" ID="txtPassWord" class="textwidthheigh" TextMode="Password"></asp:TextBox>
<input type="checkbox" runat="server" value="记住密码" id="chkRemember" onclick="CheckRemember()" />
<input type="checkbox" runat="server" value="自动登录" id="chkLogin" onclick="CheckLogin()" />
<asp:Button runat="server"  id="btnLogin"  onclick="btnLogin_Click"  />
<input type="button" id="btnClear" onclick="Clear()"  />
</form>
    <script type="text/javascript" language="javascript">
//页面加载用户名输入框获得焦点        document.getElementById("txtLoginName").focus();
        function Clear() {
//用户点击取消,清空用户名和用户密码            document.getElementById("txtLoginName").value = "";
            document.getElementById("txtPassWord").value = "";
        }
        function CheckLogin() {
  //用户勾选自动登录时,把记住密码也勾选上            var remember = document.getElementById("chkRemember");
            remember.checked = true;
        }
        function CheckRemember() {
            var remenber = document.getElementById("chkRemember");
            var login = document.getElementById("chkLogin");
            if (remenber.checked == false) {
                login.checked = false;
        //用户去掉记住密码时,也把自动登录去掉            }
        }

    </script>
protected void Page_Load(object sender, EventArgs e){ if (!IsPostBack)
            {         //获取客户端的Cookies,分别两个cookies,一个登陆名,一个密码                HttpCookie LoginNameCookie = Request.Cookies["Bic_LoginName"];
                HttpCookie LoginPassCookie = Request.Cookies["Bic_Pass"];
                if (LoginNameCookie != null)
                {
            //登录名的cookies不为空,填充登陆名                    txtLoginName.Value = LoginNameCookie.Value;
                }
                if (LoginPassCookie != null)
                {
            //密码cookies不为空,给密码框和隐藏密码框填充,当然我们的密码是加密过才存到cookies去的,至于以藏文本框的作用后面就会看到                    this.txtPassWord.Attributes.Add("value",LoginPassCookie.Value+"");
                    hidPass.Value = LoginPassCookie.Value + "";//赋值给隐藏控件
                    chkRemember.Checked = true;
                }
          //获取是否有勾选自动登录的cookies                HttpCookie Login = Request.Cookies["Bic_LoginAuto"];
          //当用户在系统点击退出时                if (Request["opFlag"] == "Exit")
                {
                    this.txtPassWord.Attributes.Add("value", "");//把密码去掉
                    chkRemember.Checked = false;//记住密码去掉
                    HttpCookie loginNameCookie = Request.Cookies["Bic_LoginName"];//获取登录名cookies                    HttpCookie loginPassCookie = Request.Cookies["Bic_Pass"];//获取密码cookies                    if (loginNameCookie != null)
                    {
              //把cookies时间设为-2相当于删掉了cookies                        loginNameCookie.Expires = DateTime.Now.AddDays(-2);
                        Response.Cookies.Set(loginNameCookie);
                    }
                    if (loginPassCookie != null)
                    {
              //把密码的cookies也删掉                        loginPassCookie.Expires = DateTime.Now.AddDays(-2);
                        Response.Cookies.Set(loginPassCookie);
                    }
            //自动登录cookies也一样                    HttpCookie login = Request.Cookies["Bic_LoginAuto"];
                    if (login != null)
                    {
                        login.Expires = DateTime.Now.AddDays(-2);
                        Response.Cookies.Set(login);
                    }
                }
                else//用户打开登录界面时                {
            //自动登录cookies不为空,用户名不为空,隐藏框密码不为空                    if (Login != null && txtLoginName.Value != "" && hidPass.Value != "")
                    {
                        SysUser user = new SysUser();
                        user.Login_Name = txtLoginName.Value;
                        user.Login_Pass = hidPass.Value;
                        int i = SysUserBLL.Login(user);//验证登录                        if (i > 0)
                        {
                 //成功登录跳转到default.aspx页面                            Page.Session["Login_Name"] = user.Login_Name;
                            HttpContext.Current.Session["Display_Name"] = SysUserBLL.getDisplayNameByname(user.Login_Name);
                            Response.Write("<script>window.location=‘‘Default.aspx‘‘;</script>");
                            Response.End();
                        }
                    }
                }
            }}//点击登录按钮事件protected void btnLogin_Click(object sender, EventArgs e)        {       //判断是否为空            if (txtLoginName.Value.Trim() != "" && txtPassWord.Text.Trim() != "")            {                SysUser user = new SysUser();                user.Login_Name = txtLoginName.Value.Trim();                user.Login_Pass = CommonHelper.MD5encipher(txtPassWord.Text.Trim());//MD5加密                HttpCookie LoginNameCookie = Request.Cookies["Bic_LoginName"];                HttpCookie LoginPassCookie = Request.Cookies["Bic_Pass"];                if (LoginNameCookie != null)//如果是记住密码情况                {                    if (txtLoginName.Value.Trim() == LoginNameCookie.Value.Trim())//读取到cookies保存的用户名和文本框用户名相同,预防用户又改动                    {                        if (LoginPassCookie != null)                        {                            if (txtPassWord.Text.Trim() == LoginPassCookie.Value.Trim())//cookies读取到的密码和文本框密码相同                            {                                user.Login_Pass = txtPassWord.Text.Trim();                            }                                                    }                    }                }                int i = SysUserBLL.Login(user);//验证登录                if (i > 0)                {                    if (chkRemember.Checked == true)//记住密码                    {                        HttpCookie loginNameCookie = new HttpCookie("Bic_LoginName", user.Login_Name);                        HttpCookie loginPassCookie = new HttpCookie("Bic_Pass", user.Login_Pass);                        loginPassCookie.Expires = DateTime.Now.AddDays(1);                        loginNameCookie.Expires = DateTime.Now.AddDays(1);                        Response.Cookies.Add(loginNameCookie);                        Response.Cookies.Add(loginPassCookie);                        if (chkLogin.Checked == true)//自动登录                         {                            HttpCookie Login = new HttpCookie("Bic_LoginAuto", "true");                            Login.Expires = DateTime.Now.AddDays(1);                            Response.Cookies.Add(Login);                        }                        else                        {                            HttpCookie Login = Request.Cookies["Bic_LoginAuto"];                            if (Login != null)                            {                                Login.Expires = DateTime.Now.AddDays(-2);                                Response.Cookies.Set(Login);                            }                        }                    }                    else//没选记住密码                    {                        HttpCookie loginNameCookie = Request.Cookies["Bic_LoginName"];                        HttpCookie loginPassCookie = Request.Cookies["Bic_Pass"];                        if (loginNameCookie != null)                        {                            loginNameCookie.Expires = DateTime.Now.AddDays(-2);                            Response.Cookies.Set(loginNameCookie);                        }                        if (loginPassCookie != null)                        {                            loginPassCookie.Expires = DateTime.Now.AddDays(-2);                            Response.Cookies.Set(loginPassCookie);                        }                    }                    Page.Session["Login_Name"] = user.Login_Name;                    HttpContext.Current.Session["Display_Name"] = SysUserBLL.getDisplayNameByname(user.Login_Name);                    Response.Write("<script>window.location=‘‘Default.aspx‘‘;</script>");                }                else                {                    Response.Write("<script>alert(‘‘用户名或密码错误!‘‘);window.location=‘‘Login.aspx‘‘;</script>");                }            }            else            {                Response.Write("<script>alert(‘‘请输入账号和密码!‘‘);window.location=‘‘Login.aspx‘‘;</script>");            }        }

以上的注释只是我个人的一些思路和理解,如有不正确之处,还望大牛指导指导啊。如觉得文章对你有帮助,请多多支持,你们的支持将会是我写博客的动力。

转之----http://www.16aspx.com/Article/3646

时间: 2024-08-04 02:21:58

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

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

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

Android记住密码后自动登录

/** * * @author alex * @version 2014-7-31下午5:25:45 * */ public class LoginActivity extends Activity { private EditText name; private EditText pass; private CheckBox isRemenber; private CheckBox isLoginSelf; private Button longin; private ProgressDial

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

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

一个简单WPF登陆界面,包含记住密码,自动登录等功能,简洁美观

简介:这是一个自己以前用WPF设计的登陆界面,属于一个实验性的界面窗体,如果用于产品还很有不足.但也是有一点学习价值.后台代码略有复杂,但基本上都有注释 分类,略有代码经验的一般都能看懂. 登陆界面外观:可以对登陆成功的信息,进行保存.包括记住密码,自动登陆等信息,默认显示上一次登陆成功的用户信息. 登陆界面保存的登陆信息: 可以删除不必要的登陆信息 登陆界面登陆Loading状态显示界面:登陆中显示遮罩层 在1.5秒左右的时间内可以取消登录状态 源码下载: 点击下载源码

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

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

android记住密码 和自动登录

import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import andro

C#如何实现记住密码,自动登录功能?【转载】

如何实现记住密码和自动登录功能? 记住密码功能我是这样实现的:将用户名存入xml文件中,在窗体加载时读取并加入combobox的Items中,然后再在选择items中的某一项时,用combobox.Text做为条件从数据库读取密码(这样做是为了省去为xml文件加密,但不会影响速度!)!这是我自己实验过的,方法有点笨!namespace address_list{    public partial class Addresslist : Form    {        public Addre

Android实战简易教程-第六十六枪(结合SharedPreferenced实现自动登录功能)

我们使用的一般应用都有记住密码.自动登录功能,这样不用用户每次都要点击登录按钮,提升用户体验,下面我们通过一个实例研究一下如何通过android的sharedpreferenced实现自动登录功能.本实例有三个界面-登录界面,跳转界面,登录成功界面. 1.登录界面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr

记住密码(Android登录界面)

在编写安卓登录界面时,我们如何记住密码,方便下一次登录呢? 首先,先创建一个安卓项目(我的版本是4.4.2的),名字为"记住密码" 然后在res文件夹下找到layout文件夹,找到activity_main.xml或fragment_main.xml,在里面输入或拖拽按钮 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http