Session与Cookie

深入理解Session与Cookie

Session与Cookie的作用都是为了保持访问用户与后端服务器的交互状态。它们有各自的有点,也有各自的缺陷。Cookie会随着个数的增多和访问量的增加,它占用的网络带宽也很大,Session致命缺点在于多台服务器之间的共享。

Cookie

属性项 属性项介绍
NAME-VALUE 注意这里的NAME不能和其他属性项的名字一样
Expires 过期时间,在设置的某个时间点后该Cookie就会失效
Domain 生成该Cookie的域名
Path 该Cookie是在当前哪个路劲下生成的
Secure 如果设置了这个属性,那只会在SSH连接时才会回传该Cookie

当前Cookie有两个版本:Version 0 和Version 1,它们有两种设置响应头的标识,分别是“Set-Cookie”和“Set-Cookie2”。这两个版本的属性项有些不同。
Version 0 属性项介绍

属性项 属性项介绍
NAME-VALUE 注意这里的NAME不能和其他属性项的名字一样
Expires 过期时间,在设置的某个时间点后该Cookie就会失效
Domain 生成该Cookie的域名
Path 该Cookie是在当前哪个路劲下生成的
Secure 如果设置了这个属性,那只会在SSH连接时才会回传该Cookie

Version 1 与Version 0 中设置的Header头的标识符是不同的,我们常用的是Set-Cookie:userName="";Domain="",这是Version0的形式。针对Set-Cookie2是这样设置的:Set-Cookie2:userName="";Domain="";Max-Age=1000。但是在Java Web的Servlet规范中并不支持Set-Cookie2响应头。

String getCookie(Cookie[] cookies, String key) {
    if (cookies != null) {
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals(key)) {
                return cookie.getValue();
            }
        }
    }
    return null;
}

    public void doGet(HttpServletRequest request, HttpServletResponse response) {
    Cookie[] cookies = request.getCookies();
    String userName = getCookie(cookies, "userName");
    String userAge = getCookie(cookies, "userAge");
    if (userName == null) {
        response.addCookie(new Cookie("userName", "zft"));
    }
    if (userAge == null) {
        response.addCookie(new Cookie("userAge", "26"));
    }
    response.getHeader("Set-Cookie");
}

你可能感兴趣的:(Session与Cookie)