java对cookie的操作

写cookie:

        Cookie cookie = new Cookie(Constants.cookie4SessionName, session.getSessionId());
        cookie.setPath("/");//设置根路径
        cookie.setDomain(".baidu.com");//设置访问域,主域和子域可以共享cookie或者设置跨域cookie
        cookie.setMaxAge(Constants.defaultCookieSessionAge * 24 * 3600);//不设置maxAge那么关闭浏览器cookie失效,此时cookie以会话的形式存在
        response.addCookie(cookie);

注:删除cookie将maxAge设置为0,同时要指定path和domain(如果不是默认的话,默认的path为写cookie的路径及子路径,默认的domain为域名全称),修改也类似,没有明确的修改和删除,实质是覆盖和超时失效。

        cookie.setPath("/");
        cookie.setDomain(".baidu.com");
        cookie.setMaxAge(0);

读cookie:

    public static String getSessionId(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        if(null == cookies || cookies.length == 0)
            return null;
        for(Cookie cookie : cookies){
            if(Constants.cookie4SessionName.equals(cookie.getName())){
                return cookie.getValue();
            }
        }
        return null;
    }

当然,可以把cookie封装成一个cookieMap使用更方便:

    // 封装cookieMap
    public static Map<String, Cookie> convertCookieToMap(Cookie[] cookies){
        Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
        if(cookies != null){
            for (Cookie cookie : cookies) {
                cookieMap.put(cookie.getName(), cookie);
            }
        }
        return cookieMap;
    }

有点头疼的是,获取cookie的时候如果根域和全域都设置了一个键值对,得不到domain信息;可以先把不需要的那个domain下的cookie删除即可。


设置安全性:设置httpOnly,js不可读,防止XSS攻击

response.setHeader("Set-Cookie", "cookiename=value;Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");


你可能感兴趣的:(java对cookie的操作)