下面是一个设置cookie的函数:
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?这是我在网上找到的一个例子
response.setHeader("SET-COOKIE", "[SOME STUFF]" +"; HttpOnly")
如果这是我想要做的唯一方法,我应该用什么替换“一些东西”,这样我就不会丢失我的函数当前存储在cookie中的任何数据?
发布于 2014-03-21 10:51:57
您说得对,手动设置header是实现目标的正确方法。
您还可以使用javax.ws.rs.core.NewCookie或任何其他具有有用toString方法的类将cookie打印到标头,以使事情变得更简单。
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";
}
和用法:
response.setHeader("SET-COOKIE", getHttpOnlyCookieHeader(myOriginalCookie));
发布于 2014-08-05 22:26:24
此代码无需使用response.setHeader()
即可运行
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);
}
发布于 2015-05-28 00:42:39
对于JEE6之前的Java Enterprise Edition版本,比如Servlet2.5,您可以在OWASP上找到来自here的变通方法。下面是一个示例:
/**
* 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());
}
https://stackoverflow.com/questions/13147113
复制相似问题