JSP中使用Cookies实现登陆信息的保存

首先,此案例需要准备三个JSP页面:

    1. login.jsp:负责登陆页面的显示(表单提交给dologin.jsp页面处理)

    2. dologin.jsp:负责判断用户是否登陆成功、用户是否勾选记住账号密码(勾选则使用Cookies保存用户信息)、查看用户信息

    3. user.jsp :显示用户信息页面(只有勾选了十天内保存用户信息才会显示用户信息)

不添加任何业务逻辑的三个页面的代码如下:

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




用户登陆界面


	

用户登陆


UserName:
Password:
十天内记住我的登陆状态

运行效果:

JSP中使用Cookies实现登陆信息的保存_第1张图片


dologin.jsp    

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




登陆成功


	

登陆成功


查看用户信息

运行效果

JSP中使用Cookies实现登陆信息的保存_第2张图片


user.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




登陆成功


	

用户资料


用户名:
密码:

运行效果

JSP中使用Cookies实现登陆信息的保存_第3张图片


接下来添加业务逻辑代码。

login.jsp中要判断是否保存了该用户的登陆信息,保存了的信息直接赋值,不需要用户再次手动输入;dologin.jsp中判断是否需要保存用户信息,没保存的判断是否需要保存(使用Cookies保存);user.jsp中获取dologin.jsp处保存的Cookies信息。

1.dologin.jsp中的业务逻辑代码(判断是否需要保存用户信息并进行相应处理)

	<%
		request.setCharacterEncoding("utf-8"); //防止中文乱码
		//首先判断用户是否选择保存登陆状态
		String[] isUseCookies = request.getParameterValues("isUseCookies"); 
		//选择保存:不为空且大于0
		if(isUseCookies != null && isUseCookies.length>0){
			String username = URLEncoder.encode(request.getParameter("username"),"utf-8");  
			//使用URLEncoder解决 无法在Cookies对象中无法保存中文字符的问题
			String password = URLEncoder.encode(request.getParameter("password"), "utf-8");
			//使用Cookies对象保存字符串
			Cookie usernemeCookie = new Cookie("username",username);
			Cookie passwordCookie = new Cookie("password",password);
<%
    	String username = ""; //用户名
    	String password = ""; //密码
    	
    	Cookie[] cookies = request.getCookies();
    	//保存有cookie对象
    	if(cookies != null && cookies.length > 0){
    		for(Cookie c: cookies){
    			if(c.getName().equals("username")){
    				username = c.getValue();
    			}
    			if(c.getName().equals("passwird")){
    				password = c.getValue();
    			}
    		}
    	}
    %>
          用户名:<%=username %>
密码:<%=password %>

//设置Cookie对象的最长生存期限(单位为秒):十天usernemeCookie.setMaxAge(864000);passwordCookie.setMaxAge(864000);//使用response对象 保存Cookie对象response.addCookie(usernemeCookie);response.addCookie(passwordCookie);}else{ //选择不保存Cookie[] cookies = request.getCookies();//如果已经保存了cookie对象 则需要将它的生存期限设为0if(cookies != null && cookies.length >0){for(Cookie c : cookies){if(c.getName().equals("username") || c.getName().equals("password")){c.setMaxAge(0); //设置cookies失效response.addCookie(c); //重新保存 不然不会起作用}}}}%>

2. user.jsp中的业务逻辑代码(只需获取cookies值,即接收用户信息)

 <%
    	request.setCharacterEncoding("utf-8");	
    
    	String username = ""; //用户名
    	String password = ""; //密码
    	
    	Cookie[] cookies = request.getCookies();
    	//保存有cookie对象
    	if(cookies != null && cookies.length > 0){
    		for(Cookie c: cookies){
    			if(c.getName().equals("username")){
    				username = URLDecoder.decode(c.getValue(),"utf-8");
    			}
    			if(c.getName().equals("password")){
    				password = URLDecoder.decode(c.getValue(),"utf-8");
    			}
    		}
    	}
    %>
          用户名:<%=username %>
密码:<%=password %>

3. login.jsp业务逻辑(判断是否保存过用户信息)

此处仍需要接收用户信息,与user.jsp中的代码相似

<%
	request.setCharacterEncoding("utf-8");
	
    	String username = ""; //用户名
    	String password = ""; //密码
    	
    	Cookie[] cookies = request.getCookies();
    	//保存有cookie对象
    	if(cookies != null && cookies.length > 0){
    		for(Cookie c: cookies){
    			if(c.getName().equals("username")){
    				username = URLDecoder.decode(c.getValue(),"utf-8");
    			}
    			if(c.getName().equals("password")){
    				password = URLDecoder.decode(c.getValue(),"utf-8");
    			}
    		}
    	}
    %>


				UserName:
				
			
			
				Password:
				
			

下面是运行过程中出现的问题:

1.login.jsp与user.jsp中password单词乒协错误,造成输入的密码无法保存

2.只注意dologin.jsp中使用URLEncoder.encode()方法进行编码,却忘记在user.jsp\login.jsp中使用URLDecoder.decode()方法进行解码,而造成中文乱码问题

3. dologin.jsp中设置了request.setCharacterEncoding("utf-8"); 却在user.jsp\login.jsp中忘记设置


你可能感兴趣的