Java操作Cookie实战+Cookie类源码分析(增删改查)

先看一下Java中Cookie类的源码,先来看一下有什么属性

//
// cookie本身的属性
// cookie的信息由键/值对组成
//

private String name;   // private String value;  // 
private String comment;    // 注释,用来描述cookie的用途
private String domain; // 可访问cookie的域名,比如你想让a.site.comb.site.com共享cookie,则需要把这个属性设置为*.site.com
private int maxAge = -1;   // cookie的有效时间
private String path;   // 可访问cookie的路径,默认为Path为产生cookie时的路径,此时cookie只能被该路径以及子路径下的页面访问;可以将Path设置为/,使cookie可以被网站下所有页面访问。
private boolean secure;    // true时只有HTTPS时才会生效,HTTP不会。默认为false
private int version = 0;   // cookie的版本,由cookie的创建者定义。
private boolean isHttpOnly = false;   // HTTP-Only 意思是告之浏览器该 cookie 绝不能通过 JavaScript  document.cookie 属性访问。目的时阻止通过 JavaScript 发起的跨站脚本攻击 (XSS) 窃取 cookie 的行为。

再来看一下Cookie类提供的方法,也都是对属性的操作

Java操作Cookie实战+Cookie类源码分析(增删改查)

下面开始实战

1.增加cookie

/**
 * 增加cookie
 *
 * @param response
 */
@RequestMapping("/addCookie")
public void addCookie(HttpServletResponse response) {
    Cookie cookie = new Cookie("foo", "bar");
    response.addCookie(cookie);
}

访问:http://localhost:8080/addCookie

浏览器看一下,添加成功

Java操作Cookie实战+Cookie类源码分析(增删改查)

2.读取Cookie

/**
 * 读取cookie
 *
 * @param request
 * @return
 */
@RequestMapping("/showCookie")
public void showCookie(HttpServletRequest request) {
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        for (Cookie cookie : cookies) {
            String name = cookie.getName();
            String value = cookie.getValue();
            System.out.println("name:" + name + ",value:" + value);
        }
    } else {
        System.out.println("cookies is null");
    }
}

访问:http://localhost:8080/showCookie

Java操作Cookie实战+Cookie类源码分析(增删改查)

3.修改指定Cookie

/**
 * 修改Cookie
 *
 * @param request
 * @param response
 */
@RequestMapping("/editCookie")
public void editCookie(HttpServletRequest request, HttpServletResponse response) {
    Cookie[] cookies = request.getCookies();
    String name = "foo";
    if (cookies != null) {
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals(name)) {
                cookie.setValue("new_bar");
                System.out.println("修改的name" + cookie.getName() + "修改后的值为:" + cookie.getValue());
                response.addCookie(cookie);
            }
        }
    } else {
        System.out.println("cookies is null");
    }
}

访问:http://localhost:8080/editCookie

Java操作Cookie实战+Cookie类源码分析(增删改查)

4.删除Cookie

/**
 * 删除Cookie
 *
 * @param request
 * @param response
 */
@RequestMapping("/delCookie")
public void delCookie(HttpServletRequest request, HttpServletResponse response) {
    Cookie[] cookies = request.getCookies();
    String name = "foo";
    if (cookies != null) {
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals(name)) {
                cookie.setMaxAge(0);
                response.addCookie(cookie);
                System.out.println("删除成功");
                break;
            }
        }
    }
}

浏览器看一下

Java操作Cookie实战+Cookie类源码分析(增删改查)