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 信息的存储时间,周期为一次会话,存储在浏览器内存中;还有一种是定时存储,设置存储时间,周期为时间设置,存储在用户电脑中。