Cookie

为什么要有cookie

浏览器和客户端之间通信,少不了HTTP,但是HTTP是无协议的,服务器不知道上一次浏览器做了些什么操作,于是诞生了cookie

什么是cookie

cookie是一个存储在浏览器的文本文件,存储着用户信息,cookie也称为浏览器会话技术。
每个请求添加Cookie HTTP请求头发送回服务器

组成

Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成.

  1. Name/Value:设置Cookie的名称及相对应的值。
  2. Expires属性:设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效
  3. Path属性:定义了Web站点上可以访问该Cookie的目录
  4. Domain属性:指定了可以访问该 Cookie 的 Web 站点或域,Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。
  5. Secure属性:指定是否使用HTTPS安全协议发送Cookie
  6. HTTPOnly 属性:如果为true,那么通过js脚本将无法读取到cookie信息。

cookie机制

在这里插入图片描述

  1. 用户第一次访问访问网站时,发出一个http请求
  2. 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部
  3. 浏览器保持cookie,第二次请求Http请求中会包含一个Cookie的头部
  4. 服务器响应,返回数据

添加cookie

  /**
     * 设置cookie
     *
     * @param response
     * @param name     cookie名字
     * @param value    cookie值
     * @param maxAge   cookie生命周期 以秒为单位
     */
    public static void addCookie(HttpServletResponse response,String domain,String path, String name,
                                 String value, int maxAge,boolean httpOnly) {
        Cookie cookie = new Cookie(name, value);
        cookie.setDomain(domain);
        cookie.setPath(path);
        cookie.setMaxAge(maxAge);
        cookie.setHttpOnly(httpOnly);
        response.addCookie(cookie);
    }

获取cookie

 /**
     * 根据cookie名称读取cookie
     * @param request
     * @param cookieName1,cookieName2
     * @return map<cookieName,cookieValue>
     */

    public static Map<String,String> readCookie(HttpServletRequest request,String ... cookieNames) {
        Map<String,String> cookieMap = new HashMap<String,String>();
            Cookie[] cookies = request.getCookies();
            if (cookies != null) {
                for (Cookie cookie : cookies) {
                    String cookieName = cookie.getName();
                    String cookieValue = cookie.getValue();
                    for(int i=0;i<cookieNames.length;i++){
                        if(cookieNames[i].equals(cookieName)){
                            cookieMap.put(cookieName,cookieValue);
                        }
                    }
                }
            }
        return cookieMap;

    }

删除cookie

   if (null != cookie) {
            cookie.setMaxAge(0);
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章