我们来聊一聊饼干

Why Cookie???


我们都知道Http是应用层的网络传输协议,但是他是无状态的协议,不能保存客户端以及服务器的状态,所以cookie应运而生,我们使用cookie来保存状态。Cookie的工作机制是用户识别及状态管理。

What Cookie???


1 为Cookie服务的首部字段

首部字段名 说明 首部类型
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接收到的Cookie信息 请求首部字段


1.1 Set-Cookie字段的几个重要属性

expires:Cookie的有效期(若不明确,则默认为浏览器关闭为止)

path:将服务器上的文件目录作为Cookie的适用对象(不指定默认为文档所在目录)

domain:作为Cookie适用对象的域名(不指定,默认为创建Cookie的服务器的域名),通过这一属性可做到与结尾匹配一致,比如,当指定example.com后,除example.com以外,www.example.com或者www2.example.com等都可以发送Cookie

secure:用于限制WEB页面仅在HTTPS安全连接时,才可以发送Cookie

Set-Cookie:name=value;secure

HttpOnly:这个属性是他的扩展属性,他使JS脚本无法获得Cookie。目的是防止跨站脚本攻击对Cookie的信息窃取

Set-Cookie:name=value;HttpOnly

How Cookie???


1、如何get/setCookie——使用HttpServletRequest
因为HttpServletRequest对象代表了客户端的请求,当客户通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,所以可以通过这个对象获得Cookie

2、setCookie

    private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
            String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
        try {
            if (cookieValue == null) {
                cookieValue = "";
            } else if (isEncode) {
                cookieValue = URLEncoder.encode(cookieValue, "utf-8");
            }
            Cookie cookie = new Cookie(cookieName, cookieValue);
            if (cookieMaxage > 0)
                cookie.setMaxAge(cookieMaxage);
            if (null != request) {// 设置域名的cookie
                String domainName = getDomainName(request);
                System.out.println(domainName);
                if (!"localhost".equals(domainName)) {
                    cookie.setDomain(domainName);
                }
            }
            cookie.setPath("/");
            response.addCookie(cookie);
        } catch (Exception e) {
             e.printStackTrace();
        }
    }

3、getCookie

 public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
        Cookie[] cookieList = request.getCookies();
        if (cookieList == null || cookieName == null) {
            return null;
        }
        String retValue = null;
        try {
            for (int i = 0; i < cookieList.length; i++) {
                if (cookieList[i].getName().equals(cookieName)) {
                    if (isDecoder) {
                        retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
                    } else {
                        retValue = cookieList[i].getValue();
                    }
                    break;
                }
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return retValue;
    }

你可能感兴趣的:(-----,【前台框架】,-----,【Servelet,JSP】)