首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用javax.servlet 2.5设置httponly cookie

使用javax.servlet 2.5设置httponly cookie
EN

Stack Overflow用户
提问于 2012-10-31 04:29:53
回答 7查看 47K关注 0票数 23

下面是一个设置cookie的函数:

代码语言:javascript
复制
public void addCookie(String cookieName, String cookieValue, Integer maxAge, HttpServletResponse response) {
    Cookie cookie = new Cookie(cookieName, cookieValue);
    cookie.setPath("/mycampaigns");
    cookie.setSecure(isSecureCookie);
    cookie.setMaxAge(maxAge);
    response.addCookie(cookie);
}

我相信在servlet 3.0中,有一种方法可以直接做到这一点。不幸的是,我的组织使用的是2.5,在这个时候升级是不可行的。

有没有办法使用响应来设置cookie?这是我在网上找到的一个例子

代码语言:javascript
复制
response.setHeader("SET-COOKIE", "[SOME STUFF]" +"; HttpOnly")

如果这是我想要做的唯一方法,我应该用什么替换“一些东西”,这样我就不会丢失我的函数当前存储在cookie中的任何数据?

EN

回答 7

Stack Overflow用户

发布于 2014-03-21 10:51:57

您说得对,手动设置header是实现目标的正确方法。

您还可以使用javax.ws.rs.core.NewCookie或任何其他具有有用toString方法的类将cookie打印到标头,以使事情变得更简单。

代码语言:javascript
复制
public static String getHttpOnlyCookieHeader(Cookie cookie) {

    NewCookie newCookie = new NewCookie(cookie.getName(), cookie.getValue(), 
            cookie.getPath(), cookie.getDomain(), cookie.getVersion(), 
            cookie.getComment(), cookie.getMaxAge(), cookie.getSecure());

    return newCookie + "; HttpOnly";
}

和用法:

代码语言:javascript
复制
response.setHeader("SET-COOKIE", getHttpOnlyCookieHeader(myOriginalCookie));
票数 9
EN

Stack Overflow用户

发布于 2014-08-05 22:26:24

此代码无需使用response.setHeader()即可运行

代码语言:javascript
复制
public void addCookie(String cookieName, String cookieValue, Integer maxAge, HttpServletResponse response) {  
    Cookie cookie = new Cookie(cookieName, cookieValue);
    cookie.setPath("; HttpOnly;");
    cookie.setSecure(isSecureCookie);
    cookie.setMaxAge(maxAge);
    response.addCookie(cookie);
}
票数 4
EN

Stack Overflow用户

发布于 2015-05-28 00:42:39

对于JEE6之前的Java Enterprise Edition版本,比如Servlet2.5,您可以在OWASP上找到来自here的变通方法。下面是一个示例:

代码语言:javascript
复制
    /**
     * Issue a cookie to the browser
     * 
     * @param response
     * @param cookieName
     * @param cookieValue
     * @param cookiePath
     * @param maxAgeInSeconds
     */
    public static void issueCookieHttpOnly(HttpServletResponse response, 
            String cookieName, 
            String cookieValue, 
            String cookiePath, 
            long maxAgeInSeconds) {

        Date expireDate= new Date();
        expireDate.setTime (expireDate.getTime() + (1000 * maxAgeInSeconds));
        // The following pattern does not work for IE.
        // DateFormat df = new SimpleDateFormat("dd MMM yyyy kk:mm:ss z");

        // This pattern works for Firefox, Chrome, Safari and Opera, as well as IE.
        DateFormat df = new SimpleDateFormat("EEE, dd-MMM-yyyy kk:mm:ss z");
        df.setTimeZone(TimeZone.getTimeZone("GMT"));
        String cookieExpire = df.format(expireDate);

        StringBuilder sb = new StringBuilder(cookieName);
        sb.append("=");
        sb.append(cookieValue);
        sb.append(";expires=");
        sb.append(cookieExpire);
        sb.append(";path=");
        sb.append(cookiePath);
        sb.append(";HttpOnly");

        response.setHeader("SET-COOKIE", sb.toString());
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13147113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档