Cookie——一份小数据,并且存在客户端上
应用场景:自动登陆里面记住账号/密码,浏览记录,购物车
http的请求是无状态的,客户但与服务器再通讯的时候,是无状态的,其实是客户端再第二次来访的时候,服务端无法识别,为了更好的用户体验,更好的交互,使用cookie记录一些信息
将账号密码保存到cookie中:
Cookie cookie = null; // 验证是否按了记住密码的按钮 if (savePwd != null) { // 将用户名和密码都编码为utf-8 String name = URLEncoder.encode(user.getUserName(), "utf-8"); String pwd = URLEncoder.encode(user.getPassWord(), "utf-8"); // 创建cookie,保存用户信息,将用户信息放进去 cookie = new Cookie("loginUser", name + "+" + pwd); // 设置生命周期与添加cookie cookie.setMaxAge(24 * 60 * 60); } else { // 如果没有按记住密码,就实例化一个空的cookie,并设置生命周期为0,销毁cookie cookie = new Cookie("loginUser", ""); cookie.setMaxAge(0); } // 将cookie添加到响应里面 res.addCookie(cookie);
获取cookie里面的账号密码:
HttpSession session = req.getSession(); //将cookie的数组取出 Cookie[] cookies = req.getCookies(); //判断是否为空 if(cookies !=null) { //不为空就遍历cookies for(Cookie cookie:cookies) { //匹配cookie if("loginUser".equals(cookie.getName())) { //取出cookie里面的账号信息 System.out.println(cookie.getValue()); //将用户信息解码 String userName = URLDecoder.decode(cookie.getValue().split("\\+")[0], "utf-8"); String passWord = URLDecoder.decode(cookie.getValue().split("\\+")[1], "utf-8"); //将用户信息发送到前端 session.setAttribute("userName", userName); session.setAttribute("passWord", passWord); } } }
总结方法:
cookie = new Cookie("loginUser", name + "+" + pwd);——创建cookie,保存用户信息
cookie.setMaxAge(24 * 60 * 60);——设置cookie的存活时间,单位是秒,如果0,代表立即删除这个cookie,如果int为负数,代表cookie默认保存在内存当中,默认为关闭浏览器后就会消失
response.addCookie(cookie);——设置cookie到响应中去
reqest.getCookies()——获取cookie的数组
cookie.getName()——获取cookie的key值
cookie.getValue()——获取cookie的value值
cookie.setValue()——设置cookie的value值
cookie.setDomain("域名")——用于指定只有请求了指定的域名,才会带上该cookie
cookie.setPath("/CookieDemo")——只有访问再域名下的cookieDemo这个路径地址才会带cookie——www.域名/CookieDemo
安全问题:由于Cookie会保存到客户端,所以有安全问题,大小和个数都限制,每个只有4KB大小,每个web工程可以有20个,总共可以有300个