`

使用Cookie记住密码、自动登录

阅读更多

最近弄了一下关于记住密码、自动登录的东西,这里记录一下主要的代码,以备不时之需。页面布局和一些次要的代码就不贴了,直接要主要的。

 

1、点击“记住密码”、“自动登录”复选框时触发的事件:

/**
 *点击“记住密码”复选框时触发事件
*/
function rememberPwd(obj){
	var isChecked = $(obj)[0].checked;
	//判断“记住密码”是否选中,若是选中,此时不需要操作“自动登录”。若是没选中,且“自动登录”勾选,那么需要撤销“自动登录”
	if(!isChecked){//说明没选中
		if($("#autoLogin")[0].checked){//"自动登录"也选中了
			$("#autoLogin")[0].checked=false;//取消自动登录
		}
	}
}
/**
* 点击“自动登录”复选框触发事件
*/
function autoLogin(obj){
	var isChecked = $(obj)[0].checked;
	//若是勾选“自动登录”,那么必然要勾选“记住密码”,若取消“自动登录”,那么“记住密码”不需要操作
	if(isChecked){//被选中了,那么“记住密码”框需要选中
		$("#rememberPwd")[0].checked=true;//启动记住密码
	}
} 
/*通过AJAX提交时带过去的参数信息:
{"userName":name,"password":pwd,"flag":1,"rememberPwd":rememberPwd,"
autoLogin":autoLogin,"time":new Date().getTime()}
*/

 

2、点击“登录”按钮校验成功之后,在java代码中使用cookie记住“记住密码”、“自动登录”标注的状态(因为系统一打开就要显示“最后一次登录的用户”信息,所以加了一个“是否为最后一次登录”的标记):

.....
String cookieValue="";
if(rememberPwd==1){
	String md5Pwd=this.getPassword();
	if(md5Pwd!=null && md5Pwd.length()<13){//没有加密的
		md5Pwd=Md5.getPWD(this.getPassword());//加密
	}
	cookieValue="1,"+md5Pwd+","+rememberPwd+","+autoLogin+","+userinfo.getUsername();//1表示当前用户是最后一次登录的
}else{
	cookieValue="1,"+","+rememberPwd+","+autoLogin+","+userinfo.getUsername();
}
cookieValue=URLEncoder.encode(cookieValue,"UTF-8");//处理中文乱码的问题  
//当系统中存在当前cookie,再次new时会自动覆盖客户端的cookie。若没有则新建。
//这样子可以保证cookie的有效期(若连续登录,Cookie的有效期永远为30天,若30天没有登录,则cookie自动过期)
Cookie cookie = new Cookie(this.getUserName(),cookieValue);//将密码信息、“记住密码”、“自动登录”的状态添加到cookie中
cookie.setMaxAge(Integer.parseInt(WebAppConfig.app("cookidMaxInactiveInterval")));//设置生命周期:目前设置的时间为一个月
response.addCookie(cookie);//添加到response中使之生效
//将其他cookie标记为非最后一次登录
Cookie[] cookies =request.getCookies();//获取所有的cookie
for(Cookie c:cookies){
	if(!c.getName().equalsIgnoreCase("JSESSIONID") && c.getName().compareTo(this.getUserName())!=0){//说明是其他用户
		String value=c.getValue();//获取当前cookie的value值
		value = URLDecoder.decode(value,"UTF-8");
		String[] info=value.split(",");//截取每段数据
		if(info.length>3){
			String cookieVal = "0,"+info[1]+","+info[2]+","+info[3]+","+info[4];//拼接cookie中的状态
			cookieVal = URLEncoder.encode(cookieVal,"UTF-8");
			c.setValue(cookieVal);//修改cookie的value值
			response.addCookie(c);//添加到response中使之生效
		}
	}
}

 

3、注销时使session失效,修改自动登录的状态,即登录时标记为“自动登录”点击注销时,将cookie中自动登录的标记修改为非自动登录:

Object userInfo = ServletActionContext.getRequest().getSession().getAttribute("userInfo");
if (userInfo!=null){
	SUser user = (SUser)userInfo;
	//1、找到当前Cookie修改自动登录状态
	Cookie[] cookies =request.getCookies();//获取所有的cookie
	for(Cookie c:cookies){
		if(c.getName().compareTo(user.getAccount())==0){//说明是当前用户
			String value=c.getValue();//获取当前cookie的value值
			value = URLDecoder.decode(value,"UTF-8");
			String[] info=value.split(",");//截取每段数据
			if(info.length>3){
				String cookieVal = "1,"+info[1]+","+info[2]+",0,"+info[4];//拼接cookie中的状态
				cookieVal = URLEncoder.encode(cookieVal,"UTF-8");
				c.setValue(cookieVal);//修改cookie的value值
				c.setMaxAge(Integer.parseInt(WebAppConfig.app("cookidMaxInactiveInterval")));//设置生命周期:目前设置的时间为一个月
				response.addCookie(c);//添加到response中使之生效
				break;//其他的不循环
			}
		}
	}
					
	//2、注销当前session
	ServletActionContext.getRequest().getSession().invalidate();
}else{
	throw new Exception("获取用户信息失败:userInfo=null");
}
 

 

4、打开系统时从cookie中获取标记信息进行登录或只是在“用户名”显示区显示最后一次登录该系统的用户名称:

//自动登录
var cookie = getLastCookieInfo();//获取登录信息
if(cookie!=null && cookie!='undefined' && cookie!=''){
	   autoLogin(cookie[0],cookie[1]);//自动登录	   
}

//获取最后一次登录该系统的用户名称进行显示
var cookie = getLastCookieInfo();
if(cookie!=null && cookie!='undefined' && cookie!=''){
	var name=cookie[1].split(",")[4];
	$("#lastLoginUser").text(name);//显示用户名
	$("#lastLoginAccount").val(cookie[0]);//保存账号
}

/**
 * 从cookie中获取最后一次登录的用户信息
 */
 function getLastCookieInfo(){
 var array = document.cookie.split(";");  
   if(array.length>0){
	   //取最后一次登录的用户信息
	   for(var i=0;i<array.length;i++){
		   var a = decodeURI(array[i]);//解码
		   a=unescape(a);//编码
		   var arr = a.replace(/"/g,"");//去掉双引号
		   var cookie = arr.split("="); 
		   if(cookie.length>0){
		   	   var sign = cookie[1].split(",")[0];//逗号分开的第一个数据是”是否为最后登录用户“的标记
			   if(sign=="1"){
				   return [cookie[0],cookie[1]];
				   break;//结束循环
			   }
		   }
	   }
   }
 }

 /**
 * 根据Cookie中的值调用AJAX进行登录
 */
function autoLogin(name,other){
if(other!=null && other!=""){
 	//0-是否为最后登录 1-密码 2-记住密码标记 3-自动登录标记
 	var val = other.split(",");
 	if(val.length>0 && val[3]=="1"){//自动登录
 		$.ajax({
 			url :"login!userLoginOrQuit.action",
 			async :false,//同步
 			type :"post",
 			dataType :"json",
 			data : {"userName":name,"password":val[1],"flag":1,"rememberPwd":val[2],"autoLogin":val[3],"time":new Date().getTime()},
 			timeout :4000,
 			error : function(C) {
 				alert(C.toString());
 			},
 			success : function(C) {
 			}
 		});
 		 		
	}
}
}

 

5、打开登录框进行登录时,自动获取账号和密码信息进行加载:

function login(){
.....
//获取账号
var account  = $("#lastLoginAccount").val();
if(!isempty(account)){
	account = jQuery.trim(account);//去除左右空格
	$("#userName").val(account);//用户名(账号)
	//根据账户获取密码、记住密码、自动登录信息
	var cookieValue = getPwdFromAccount(account);//调用getPwdFromAccount()方法获取基本信息
	if(!isempty(cookieValue)){//不为空
		//0-是否为最后一次登录用户 1-密码 2-记住密码标记 3-自动登录标记4-用户名(非账户)
		var pwdArr = cookieValue.split(",");
		if(pwdArr.length>0 && !isempty(pwdArr[1])){//密码不为空
			//密码框赋值:通过MD5加密之后的值
			$("#password").val(pwdArr[1]);	
			//记住密码
			$("#rememberPwd")[0].checked=true;//勾选记住密码
		}
				
	}
}
$("#userName").focus();//用户名文本框聚焦
}

/**
 * 根据账户获取密码、记住密码、自动登录信息
 * */
function getPwdFromAccount(account){
   var array = document.cookie.split(";");  
   if(array.length>0){
	   //取最后一次登录的用户信息
	   for(var i=0;i<array.length;i++){
		   var a = decodeURI(array[i]);//解码
		   a=unescape(a);//编码
		   var arr = a.replace(/"/g,"");//去掉双引号
		   var cookie = arr.split("="); 
		   if(cookie.length>0){
		   	   var cookieKey = jQuery.trim(cookie[0]);//账户
		   	   if(cookieKey==account){
		   	   	return cookie[1];//把基本信息传回去
		   	   }
		   }
	   }
   }
}

 

 6、非自动登录状态下,输入用户名之后,按Tab键或Enter键,自动切换到“密码框”且自动从Cookie中获取密码信息:

/*
文本框输入用户名之后,按TAB键或Enter键,自动切换到“密码框”:
onkeydown="if(event.keyCode==9 || event.keyCode==13){$('#password').focus();return false;}"//9:tab键 13:回车键
*/
/**
 * 根据用户名,从cookie中获取相应信息自动补充
 * */
function getPwd(){
	var username = $("#userName").val();
	if(!isempty(username)){//不为空
		username = jQuery.trim(username);//去除左右空格
		//根据账户获取密码、记住密码、自动登录信息
		var cookieValue = getPwdFromAccount(username);
		if(!isempty(cookieValue)){//不为空
			//0-是否为最后一次登录用户 1-密码 2-记住密码标记 3-自动登录标记4-用户名(非账户)
			var pwdArr = cookieValue.split(",");
			if(pwdArr.length>0 && !isempty(pwdArr[1])){//密码不为空
				//密码框赋值
				$("#password").val(pwdArr[1]);	
				//记住密码
				$("#rememberPwd")[0].checked=true;//勾选记住密码
			}
		}else{
			$("#password").val('');//清空密码框
			$("#rememberPwd")[0].checked=false;//勾选记住密码
		}
	}else{
		$("#loginError").empty().append("用户名不能为空");
	}
}

 

 7、公用方法isempty,用来当前值、当前变量、当前对象等是否为空:

/**
*验证js变量的值是否为空,
* true-不存在
* false-存在
* 
*/
function isempty(v){ 
switch (typeof v){ 
	case 'undefined' : return true;
	case 'string' : if(jQuery.trim(v).length == 0) return true; break; 
	case 'boolean' : if(!v) return true; break; 
	case 'number' : if(0 === v) return true; break; 
	case 'object' : 
	if(null === v) return true; 
	if(undefined !== v.length && v.length==0) return true; 
	for(var k in v){return false;} return true; 
	break; 
} 
return false; 
}

 

分享到:
评论

相关推荐

    java cookie 读写,记住密码 自动登录

    本主题将详细讲解如何使用Java进行Cookie的读写操作,以及如何利用Cookie实现记住密码和自动登录功能。 1. **Cookie基本概念** Cookie是由服务器发送到用户浏览器并存储在本地的一小块数据,当用户再次请求同一...

    Jsp+Servlet+Cookie实现记住密码,自动登录,防止表单提交,记录登录次数

    在这个实例中,我们将深入探讨如何利用这些技术实现记住密码、自动登录、防止表单重复提交以及记录登录次数的功能。 首先,让我们从"记住密码"功能开始。在用户登录时,如果用户勾选了“记住我”的选项,系统会将...

    Cookie记住用户名密码

    在网页应用中,"Cookie记住用户名密码"是一个常见的功能,它允许用户在访问网站时选择保存他们的登录信息,以便下次访问时自动填充,提供便捷的用户体验。这个功能主要依赖于JavaScript和Cookie技术来实现,无需复杂...

    asp.net 记住密码 自动登录

    总之,ASP.NET的"记住密码"和"自动登录"功能是通过Forms Authentication机制实现的,通过创建和管理加密的身份验证cookie来保持用户的登录状态。理解这一机制并正确实现这两个功能,能显著提升网站的用户体验。在...

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

    综上所述,“Android记住密码和自动登录实现”主要是通过SharedPreferences存储用户登录凭证,以及使用CookieManager处理服务器返回的Cookie来实现。在实际应用中,还需要考虑安全性、隐私政策以及不同网络环境下的...

    JavaWeb 中Cookie实现记住密码的功能示例

    3. **简化登录过程**:用户选择“记住密码”后,Cookie存储了加密后的用户名和密码,下次访问时可直接自动登录。 4. **广告精准投放**:广告商可以通过Cookie追踪用户浏览历史,展示更具针对性的广告。 **三、...

    cookie实现记住用户名密码

    总之,这个项目旨在教授如何利用Cookie在Java Web环境中实现记住用户名密码的功能,同时也涉及了IntelliJ IDEA和Tomcat的使用,以及Web开发中的基本安全实践。通过学习和实践这样的项目,开发者可以更深入地理解Web...

    cookie记住账号密码

    标题中的“cookie记住账号密码”指的是在Web应用中,如何利用Cookie技术来实现用户登录状态的持久化,以便用户在下次访问网站时无需再次输入用户名和密码。这涉及到Web开发中的基本概念,主要包括Cookie的工作原理、...

    通过cookie记住密码-HTML

    在网页开发中,"通过cookie记住密码"是一个常见的功能,它允许用户在访问网站时无需每次都手动输入登录凭据。这个功能的实现涉及到HTML、JavaScript(JS)以及服务器端的技术,如HTTP Cookie。下面我们将详细探讨这...

    通过cookie记住密码-HTML样例源码

    在网页开发中,用户登录体验的一个重要环节是“记住密码”功能。这个功能允许用户在一次登录后,下次访问同一网站时自动填充用户名和密码,从而简化登录过程。本示例源码着重讲解如何利用HTML配合Cookie技术实现这一...

    C# 记住密码功能

    在C#编程中,"记住密码功能"是一个常见的用户交互特性,它允许用户在登录时选择保存其凭据,以便在未来的会话中自动填充,实现免密登录。这一功能提高了用户体验,但也需要谨慎处理,以确保安全性。下面将详细讨论...

    java web中使用cookie记住用户的账号和密码

    为了提高用户体验,还可以在登录页面中预先填充上一次的账号,但不自动填充密码,除非用户明确选择“记住密码”。 通过以上步骤,Java Web应用就可以实现记住用户账号和密码的功能,同时兼顾安全性。在实际项目中...

    jsp,自动登录,记住密码

    综上所述,"jsp,自动登录,记住密码"是通过JSP和Cookie技术实现的一种用户体验优化,但同时也需要考虑到安全性和隐私保护。在设计和实现这样的功能时,开发者需要平衡便捷性与安全性,确保系统的可靠性和用户的数据...

    JS读取cookie(记住账号密码)

    2. **设置Cookie**:用户登录时,通过`SetPwdAndChk`函数判断是否选中了“记住密码”选项。如果选中,则将用户名和密码以cookie形式保存;如果没有选中,则通过`ResetCookie`函数清除之前的cookie信息。 3. **获取...

    js用cookie记住密码实例

    JavaScript(简称JS)是一种轻量级的脚本语言,常用于...综上所述,JavaScript通过操作Cookie可以实现“记住密码”功能,但必须注意安全问题,如加密存储、使用HTTPS等。此外,理解Cookie的限制和使用场景也至关重要。

    通过js来设置cookie和读取cookie,实现登陆时记住密码的功能

    本文将详细讲解如何使用JavaScript(JS)来设置和读取cookie,从而实现登录时记住密码的功能。 首先,理解cookie的基本概念。Cookie是由服务器端生成,发送到客户端(浏览器),并存储在本地的一种小数据片段。它...

    jsp+servlet+Cookie实现记住密码功能

    在Web开发中,"jsp+servlet+Cookie实现...总之,通过JSP、Servlet和Cookie的组合,开发者可以创建一个具备记住密码功能的登录系统,提高用户的使用体验。但在实现过程中,应始终关注安全性,以保护用户的数据不被滥用。

    记住密码和判断是否进入

    在IT行业中,"记住密码"是一项常见的功能,它允许用户在登录某个应用或网站时保存他们的凭证,以便在下次访问时自动填充,提高用户体验。这个功能通常涉及到浏览器存储、加密安全以及用户隐私等方面的知识。 首先,...

    JAVA通过Session和Cookie实现网站自动登录

    - 当服务器检测到有效Cookie时,它会尝试根据存储的用户名和密码自动登录。 - 如果验证通过,用户可以直接进入网站而无需再次输入凭证。 #### 安全性考虑 虽然使用`Session`和`Cookie`实现自动登录可以极大地...

    cookie自动登录认证

    如果用户选择了“记住密码”选项,则可以额外设置一个Cookie来存储经过加密处理的密码。例如: ```java if (ParamUtils.getBooleanParameter(request, "savePassword")) { // 设置密码相关的Cookie cookie = ...

Global site tag (gtag.js) - Google Analytics