//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);
}