Java中Cookie的使用

Cookie 技术其实是浏览器端的数据存储技术,解决了不同请求需要使用相同的请求数据的问题。我们把请求需要共享的请求数据,存储在浏览器端,避免用户进行重复的书写请求数据。但是哪些数据需要使用 Cookie 技术存储起来是一个主观问题,需要在后台进行响应的时候来告诉浏览器,有些数据其他请求还会使用,需要存储起来。
HTTP 协议是没有记忆功能的,一次请求结束后,相关数据会被销毁。如果第二次的请求需要使用相同的请求数据时,可以通过使用 Cookie 技术来解决这一问题。以下是登录的一个案例,我们可以通过这个案例来了解Cookie 技术的使用。
1.登录界面截图
在这里插入图片描述
2.通过创建Cookie对象来存储账号和密码信息,示例代码:

public void login(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//设置请求编码格式
		request.setCharacterEncoding("UTF-8");
		//设置响应编码格式
		response.setCharacterEncoding("UTF-8");
		//设置数据返回的类型
		response.setContentType("text/json");
		//获取请求信息
		String PUserNumber=request.getParameter("PUserNumber");//账号
		String Password=request.getParameter("password");//密码
		String remember=request.getParameter("remember");//记住密码
		String str="";
		
		//通过账号查询用户密码
		PUser user=userService.findByPUserNumber(PUserNumber);
		//判断账号是否存在
		if(user!=null){
			//判断密码是否正确
			if(user.getPassword().equals(Password)){
				str="success";
				//判断记住密码是否选中
				if(remember!=null){
					//创建Cookie对象
					Cookie c1=new Cookie("PUserName", PUserNumber);
					Cookie c2=new Cookie("Password", Password);
					//设置Cookie的有效期(3天)
					c1.setMaxAge(3*24*3600);
					c2.setMaxAge(3*24*3600);
					//响应Cookie信息
					response.addCookie(c1);
					response.addCookie(c2);
				}
			}else{
				str="密码错误,请重新输入";
			}
		}else{
			str="该用户不存在";
		}
		PrintWriter out=response.getWriter();
		out.write(ToJsonUtil.toJson(str));
		out.flush();//刷新该流的缓冲
		out.close();//关闭流
  }

3.获取Cookie,示例代码:

public void getCookie(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//设置数据返回的类型
		response.setContentType("text/json");
		//设置请求编码格式
		request.setCharacterEncoding("UTF-8");
		//设置响应编码格式
		response.setCharacterEncoding("UTF-8");
		String State="fail";
		//获取Cookie信息数组
		Cookie[] cks=request.getCookies();
		if(cks!=null){
			for (Cookie cookie : cks) {
				String puserNumber="";//账号
				String password="";//密码
				//Cookie是以键值对的形式来保存数据的
				//可以通过键来获取相对应的值
				if("PUserName".equals(cookie.getName())){
					puserNumber=cookie.getValue();
					State = puserNumber;
				}
				if("Password".equals(cookie.getName())){
					password=cookie.getValue();
					State += "&"+password;
				}
			}
		}
		PrintWriter out=response.getWriter();
		out.write(ToJsonUtil.toJson(State));
		out.flush();//刷新该流的缓冲
		out.close();//关闭流
	}

4.在页面调用获取Cookie的方法,然后将返回的值回填,这样记住密码的效果就完成了,示例代码:

$(document).ready(function () {
    $.post("${ctx}/servlet/LoginServlet?type=cookie",function(d){
        var data=d.data;
        if(data[0]!="fail"){
       		var str=data[0].split("&");//分割字符串
       		$("#stu_username_hide").val(str[0]);//账号
       		$("#stu_password_hide").val(str[1]);//密码
        }
     });
 });

5.Cookie技术的特点
Cookie技术是浏览器端的数据存储技术,通过键值对的方式来存储数据,适合少量的数据,Cookie技术是不安全的。Cookie有两种数据存储方式,一种是临时存储,不设置 cookie 信息的存储时间,周期为一次会话,存储在浏览器内存中;还有一种是定时存储,设置存储时间,周期为时间设置,存储在用户电脑中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值