自动登录的实现Cookie

帅博简
2023-12-01

代码粗略,请大佬们勿喷

这一次的编写需要特别注意cookies获取时的空指针异常

在使用cookie自动登录的时候未对账号密码进行输入,request.getParameter()会返回null值,避免使用null.equals("")防止空指针异常

@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//在servlet中获取获取cookie信息,完成登录功能
				String cookieUser=null;
				Cookie[] cookies=request.getCookies();
				if(cookies!=null){
					for(Cookie cookie:cookies)
					{
						if("user".equals(cookie.getName())){
							cookieUser=cookie.getValue();
							break;
						}
					}
				}
	
			//使用编码过滤器后,在servlet中不在进行编码转换
			String userName=request.getParameter("userName");
			String password=request.getParameter("password");
			HttpSession session=null;
			
			if("admin".equals(userName)&&"123456".equals(password)||cookieUser!=null){
				//避免空指针异常
				
			//模拟登录成功,可以进行会话跟踪


			session=request.getSession();    //获得当前用户的会话,如果没有则会创建一个新的会话
															         //(括号内如果是true)如果当前没有会话,则创建一个新的会话	
															        //(括号内如果是false)如果当前没有回话,则返回null,不会创建新会话
			//更新会话
			session.setAttribute("LOGIN_USER", cookieUser!=null?cookieUser:userName);


			//使用cookie实现自动登录功能
			//	1.用户登录成功,创建cookie信息到客户端中
			// 2.构造cookie对象
			
			Cookie cookie=new Cookie("user",cookieUser!=null?cookieUser:userName );
			//作用目录,设置cookie在服务器的生效路径
			cookie.setPath("/");
			cookie.setMaxAge(3600*2);//设置有效时间
			//把cookie发送到客户端
			//客户端接收到cookie后会保存到浏览器缓存中
			response.addCookie(cookie);
			//当浏览器再次打开本网站时,浏览器会读取有效的cookie信息,发送到服务器


//			request.getRequestDispatcher("index.jsp").forward(request, response);
			//表单提交后需要修改浏览器上的网址,否则,当刷新页面时会产生表单的重复提交、使用重定向
			
			//解决表单重复提交方法:
					//	1.在服务端使用页面重定向,返回一个新的URL
					//	2.在ajax请求时,经常采用禁用提交按钮的方式
			response.sendRedirect("index.jsp");
			
			
		}else{
			//模拟登录失败,
			session=request.getSession(true);
			session.removeAttribute("LOGIN_USER");
//			request.getRequestDispatcher("index.html").forward(request, response);
			response.sendRedirect("index.html");
		}



 类似资料: