//add recognized cookie field: expires/domain/path/secure/httponly/version, into cookie public bool addFieldToCookie(ref Cookie ck, pairItem pairInfo) { bool added = false; if (pairInfo.key != "") { string lowerKey = pairInfo.key.ToLower(); switch (lowerKey) { case "expires": DateTime expireDatetime; if (DateTime.TryParse(pairInfo.value, out expireDatetime)) { // note: here coverted to local time: GMT +8 ck.Expires = expireDatetime; //update expired filed if (DateTime.Now.Ticks > ck.Expires.Ticks) { ck.Expired = true; } added = true; } break; case "domain": ck.Domain = pairInfo.value; added = true; break; case "secure": ck.Secure = true; added = true; break; case "path": ck.Path = pairInfo.value; added = true; break; case "httponly": ck.HttpOnly = true; added = true; break; case "version": int versionValue; if (int.TryParse(pairInfo.value, out versionValue)) { ck.Version = versionValue; added = true; } break; default: break; } } return added; }//addFieldToCookie
例 7.4. addFieldToCookie 的使用范例
public bool parseSingleCookie(string cookieStr, ref Cookie ck) { bool parsedOk = true; //Cookie ck = new Cookie(); //string[] expressions = cookieStr.Split(";".ToCharArray(),StringSplitOptions.RemoveEmptyEntries); //refer: http://msdn.microsoft.com/en-us/library/b873y76a.aspx string[] expressions = cookieStr.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); //get cookie name and value pairItem pair = new pairItem(); if (parseCookieNameValue(expressions[0], out pair)) { ck.Name = pair.key; ck.Value = pair.value; string[] fieldExpressions = getSubStrArr(expressions, 1, expressions.Length - 1); foreach (string eachExpression in fieldExpressions) { //parse key and value if (parseCookieField(eachExpression, out pair)) { // add to cookie field if possible addFieldToCookie(ref ck, pair); }