欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

session存储Users对象实现记住密码

程序员文章站 2022-06-25 11:21:58
今天剖析一下用session实现记住密码1.controller逻辑:存入session用户对象:当rem为选中状态时,判断账号密码为正确时,把账号从数据库查询出来的对象存入session中。2.jsp中逻辑:输入手机号后从session中取值当存在这个手机号时从session中取密码的值1login.jsp页面有账号,密码,rem多选框2.从session中获取对象及指定值。......

之前做过cookie实现记住密码,这次换成session记住密码又做了一遍,有很多收获。
本次博客分为两部分。一部分是cookie和session的区别(面试经常被问道);另一部分是sesion实现记住密码,在Jsp页面和Controller页面的代码编写。

一、cookie和session区别

区别:
1.cookie是浏览器端技术;将数据保存到浏览器中,不安全不可以保存中文保存时编码: URLEncoder.encode();取值时解码:URLDecoder.decode();。
2.session是服务器端技术;将数据保存到服务器中,当访问servlet时,服务器创建session对象同时会向浏览器写入一个sessionId保存到cookie中,当浏览器关闭,session里面的数据没有删除,而是保存sessionId的cookie丢失因此找不到数据,安全
相同:
两者作用范围都是一次会话(浏览器开启到关闭)有效。

二、session实现记住密码

分为3步。
1.jsp页面布局
session存储Users对象实现记住密码

默认rem选择框是选中状态

<form name="register" action="login.action"  method="post">
	<div class="form_row">
		<label class="contact"><strong>Phone:</strong></label> 
		<input type="text" class="contact_input" name="uPhone" id="uPhone" value="${param.uPhone }" onblur="phoneBlur(this.value);"/>
		<span id="uPhoneMsg"></span>
	</div>
	<div class="form_row">
		<label class="contact"><strong>Pwd:</strong></label> 
		<input type="text" class="contact_input" name="uPwd" id="uPwd"/>
		<span id="uPwdMsg">${flag }</span>
	</div>
	<div class="form_row">
		<div class="terms">
			<input type="checkbox" name="rem"  id="rem" checked="checked">记住密码
	<!-- <input type="checkbox" name="terms" id="terms"/> Rember me -->
		</div>
	</div>
	<div class="form_row">
		<input type="submit" class="register" value="login" />
	</div>
</form>

2.controller层逻辑处理
我的代码有两处用到session,这里只看第二处即可。
//2.登录按钮按下后 当rem被选中,且密码正确时,将账号密码这个对象存入session

//5.1登录
@RequestMapping("login")
public String login(String uPhone,String uPwd,String rem,Model model,HttpServletResponse response,HttpServletRequest request){
	HttpSession session = request.getSession();
	String flag = "1";
	String uId = us.selectUsersByPhone_PwdService(uPhone, uPwd);
	//判断如果账号密码不存在 返回登录页面;存在,跳转到首页
	if(uId==null){
		flag="密码错误";
			request.setAttribute("flag", flag);
			return "register";
	}else{
		Users u1 = us.selectUsersByIdService(uId);
		//1.只要登录成功   就将users对象存入session中,为之后的过滤器使用
		session.setAttribute("handlerInterceptorSession", u1);
		
		//2.登录按钮按下后 当rem被选中,且密码正确时,将账号密码存入session
		if(rem.equals("on")){
			Users u2 = new Users(uPhone,uPwd);
			session.setAttribute("remSession", u2);
		}
		return "index";
	}
	
}

3.jsp页面补充
这里主要看//5.当光标离开后调用记住密码的功能
逻辑是:用户输入账号光标离开后,从session中取值,如果账号在session中存在,则获取账号对应的密码,将密码赋值给输入框。(前提是:rem选择框是选中状态,在1.jsp页面布局里面就设置好了)

<script>
function phoneBlur(uPhone){
var phoneMsg = document.getElementById("uPhoneMsg");
	phoneMsg.innerText="";
	$.ajax({
		type:"post",
		url:"phoneExist.action",
		data:{"uPhone":uPhone},
		dataType:"text", 
		/* 当flag =0 提示用户不存在
			当flag = 1 普通用户
		 */
		success:function(flag){
			if(flag==0){
				phoneMsg.innerText = "请先注册";
			}
		}
	})  
//5.当光标离开后调用记住密码的功能
remPwd(uPhone);
	
};

//5记住密码
/*1.当phone光标离开后 当rem被选中 从Remsession里面遍历,获取账号对应的密码。  */
//alert($("#rem").val());
function remPwd(uPhone){
	//每次进入 密码先清空
	$("#uPwd").val("");
	var remVal = $("#rem").val();
	if(remVal=="on"){
		//第一次登录会报异常,所以加""
		var sessionPhone= ${remSession.uPhone}+"";
		var sessionPwd= ${remSession.uPwd}+"";
		//当账号在session中可以查询到,就将session中的密码赋值给输入框pwd
		if(sessionPhone==uPhone){
			$("#uPwd").val(sessionPwd);
		}
	}
}
</script>

至此,session存储Users对象实现记住密码功能完毕,欢迎大家有不懂的地方留言。

本文地址:https://blog.csdn.net/weixin_46485576/article/details/112545702