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个

posted on 2019-12-14 22:25  大景少  阅读(124)  评论(0编辑  收藏  举报