src/share/classes/java/net/HttpCookie.java
Print this page
*** 28,37 ****
--- 28,39 ----
import java.util.List;
import java.util.StringTokenizer;
import java.util.NoSuchElementException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
+ import java.util.Calendar;
+ import java.util.GregorianCalendar;
import java.util.Date;
import java.util.Locale;
import java.util.Objects;
/**
*** 87,97 ****
// date formats used by Netscape's cookie draft
// as well as formats seen on various sites
private final static String[] COOKIE_DATE_FORMATS = {
"EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'",
"EEE',' dd MMM yyyy HH:mm:ss 'GMT'",
! "EEE MMM dd yyyy HH:mm:ss 'GMT'Z"
};
// constant strings represent set-cookie header token
private final static String SET_COOKIE = "set-cookie:";
private final static String SET_COOKIE2 = "set-cookie2:";
--- 89,102 ----
// date formats used by Netscape's cookie draft
// as well as formats seen on various sites
private final static String[] COOKIE_DATE_FORMATS = {
"EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'",
"EEE',' dd MMM yyyy HH:mm:ss 'GMT'",
! "EEE MMM dd yyyy HH:mm:ss 'GMT'Z",
! "EEE',' dd-MMM-yy HH:mm:ss 'GMT'",
! "EEE',' dd MMM yy HH:mm:ss 'GMT'",
! "EEE MMM dd yy HH:mm:ss 'GMT'Z"
};
// constant strings represent set-cookie header token
private final static String SET_COOKIE = "set-cookie:";
private final static String SET_COOKIE2 = "set-cookie2:";
*** 1023,1039 ****
*
* @return delta seconds between this cookie's creation time and the time
* specified by dateString
*/
private long expiryDate2DeltaSeconds(String dateString) {
for (int i = 0; i < COOKIE_DATE_FORMATS.length; i++) {
SimpleDateFormat df = new SimpleDateFormat(COOKIE_DATE_FORMATS[i],
Locale.US);
df.setTimeZone(GMT);
try {
! Date date = df.parse(dateString);
! return (date.getTime() - whenCreated) / 1000;
} catch (Exception e) {
// Ignore, try the next date format
}
}
return 0;
--- 1028,1060 ----
*
* @return delta seconds between this cookie's creation time and the time
* specified by dateString
*/
private long expiryDate2DeltaSeconds(String dateString) {
+ Calendar cal = new GregorianCalendar(GMT);
+ cal.set(1970, 0, 1, 0, 0, 0);
for (int i = 0; i < COOKIE_DATE_FORMATS.length; i++) {
SimpleDateFormat df = new SimpleDateFormat(COOKIE_DATE_FORMATS[i],
Locale.US);
df.setTimeZone(GMT);
+ df.setLenient(false);
+ df.set2DigitYearStart(cal.getTime());
try {
! cal.setTime(df.parse(dateString));
! if (!COOKIE_DATE_FORMATS[i].contains("yyyy")) {
! // 2-digit years following the standard set
! // out it rfc 6265
! int year = cal.get(Calendar.YEAR);
! year %= 100;
! if (year < 70) {
! year += 2000;
! } else {
! year += 1900;
! }
! cal.set(Calendar.YEAR, year);
! }
! return (cal.getTimeInMillis() - whenCreated) / 1000;
} catch (Exception e) {
// Ignore, try the next date format
}
}
return 0;