jdk/src/share/classes/java/net/HttpCookie.java
changeset 14787 54eb3f090934
parent 13259 f8aa59b3988e
child 17926 1a74b1b8cad1
equal deleted inserted replaced
14786:a9f61e0cbe61 14787:54eb3f090934
    28 import java.util.List;
    28 import java.util.List;
    29 import java.util.StringTokenizer;
    29 import java.util.StringTokenizer;
    30 import java.util.NoSuchElementException;
    30 import java.util.NoSuchElementException;
    31 import java.text.SimpleDateFormat;
    31 import java.text.SimpleDateFormat;
    32 import java.util.TimeZone;
    32 import java.util.TimeZone;
       
    33 import java.util.Calendar;
       
    34 import java.util.GregorianCalendar;
    33 import java.util.Date;
    35 import java.util.Date;
    34 import java.util.Locale;
    36 import java.util.Locale;
    35 import java.util.Objects;
    37 import java.util.Objects;
    36 
    38 
    37 /**
    39 /**
    87     // date formats used by Netscape's cookie draft
    89     // date formats used by Netscape's cookie draft
    88     // as well as formats seen on various sites
    90     // as well as formats seen on various sites
    89     private final static String[] COOKIE_DATE_FORMATS = {
    91     private final static String[] COOKIE_DATE_FORMATS = {
    90         "EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'",
    92         "EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'",
    91         "EEE',' dd MMM yyyy HH:mm:ss 'GMT'",
    93         "EEE',' dd MMM yyyy HH:mm:ss 'GMT'",
    92         "EEE MMM dd yyyy HH:mm:ss 'GMT'Z"
    94         "EEE MMM dd yyyy HH:mm:ss 'GMT'Z",
       
    95         "EEE',' dd-MMM-yy HH:mm:ss 'GMT'",
       
    96         "EEE',' dd MMM yy HH:mm:ss 'GMT'",
       
    97         "EEE MMM dd yy HH:mm:ss 'GMT'Z"
    93     };
    98     };
    94 
    99 
    95     // constant strings represent set-cookie header token
   100     // constant strings represent set-cookie header token
    96     private final static String SET_COOKIE = "set-cookie:";
   101     private final static String SET_COOKIE = "set-cookie:";
    97     private final static String SET_COOKIE2 = "set-cookie2:";
   102     private final static String SET_COOKIE2 = "set-cookie2:";
  1023      *
  1028      *
  1024      * @return  delta seconds between this cookie's creation time and the time
  1029      * @return  delta seconds between this cookie's creation time and the time
  1025      *          specified by dateString
  1030      *          specified by dateString
  1026      */
  1031      */
  1027     private long expiryDate2DeltaSeconds(String dateString) {
  1032     private long expiryDate2DeltaSeconds(String dateString) {
       
  1033         Calendar cal = new GregorianCalendar(GMT);
  1028         for (int i = 0; i < COOKIE_DATE_FORMATS.length; i++) {
  1034         for (int i = 0; i < COOKIE_DATE_FORMATS.length; i++) {
  1029             SimpleDateFormat df = new SimpleDateFormat(COOKIE_DATE_FORMATS[i],
  1035             SimpleDateFormat df = new SimpleDateFormat(COOKIE_DATE_FORMATS[i],
  1030                                                        Locale.US);
  1036                                                        Locale.US);
       
  1037             cal.set(1970, 0, 1, 0, 0, 0);
  1031             df.setTimeZone(GMT);
  1038             df.setTimeZone(GMT);
       
  1039             df.setLenient(false);
       
  1040             df.set2DigitYearStart(cal.getTime());
  1032             try {
  1041             try {
  1033                 Date date = df.parse(dateString);
  1042                 cal.setTime(df.parse(dateString));
  1034                 return (date.getTime() - whenCreated) / 1000;
  1043                 if (!COOKIE_DATE_FORMATS[i].contains("yyyy")) {
       
  1044                     // 2-digit years following the standard set
       
  1045                     // out it rfc 6265
       
  1046                     int year = cal.get(Calendar.YEAR);
       
  1047                     year %= 100;
       
  1048                     if (year < 70) {
       
  1049                         year += 2000;
       
  1050                     } else {
       
  1051                         year += 1900;
       
  1052                     }
       
  1053                     cal.set(Calendar.YEAR, year);
       
  1054                 }
       
  1055                 return (cal.getTimeInMillis() - whenCreated) / 1000;
  1035             } catch (Exception e) {
  1056             } catch (Exception e) {
  1036                 // Ignore, try the next date format
  1057                 // Ignore, try the next date format
  1037             }
  1058             }
  1038         }
  1059         }
  1039         return 0;
  1060         return 0;