Java 里面给 Cookie 加 HTTPONLY

使用 Tomcat 服务器,在conf/context.xml里面加上useHttpOnly后,也只能能给 JSESSIONID 加入 httpOnly 属性,并不能给应用程序里面的Cookie加上。

如在context.xml上加

<Context useHttpOnly="true">

而javax.servlet.http.Cookie本身也没有HTTPONLY属性。所以加的时候也不会有什么Cookie.setHttpOnly之类的方法。其它可以通过设置响应头实现。

比如之前若是写了一个addCookie方法如下

public static void addCookie(HttpServletResponse res, String cookieName,
        String cookieValue) {
    String v = "";
    try {
        v = URLEncoder.encode(cookieValue, "UTF-8");
    }
    catch (Exception e) {
    }
    Cookie c = new Cookie(cookieName, v);
    c.setPath("/");
    res.addCookie(c);
}

其实Cookie也只是服务器给浏览器设置了一个set-Cookie响应头,我们可以利用response.setHeader来自己拼这个头开实现带httpOnly属性的的响应头。

可以稍作修改,改为响应头设置Cookie,在响应头里面把httpOnly给带上

public static void addCookie(HttpServletResponse res, String cookieName,
        String cookieValue) {
    String v = "";
    try {
        v = URLEncoder.encode(cookieValue, "UTF-8");
    }
    catch (Exception e) {
    }
    res.setHeader("SET-COOKIE", cookieName+"=" + v + "; Path=/"  + "; HttpOnly" );
}