//parse single cookie string to a cookie
//example:
//MSPShared=1; expires=Wed, 30-Dec-2037 16:00:00 GMT;domain=login.live.com;path=/;HTTPOnly= ;version=1
//PPAuth=CkLXJYvPpNs3w!fIwMOFcraoSIAVYX3K!CdvZwQNwg3Y7gv74iqm9MqReX8XkJqtCFeMA6GYCWMb9m7CoIw!ID5gx3pOt8sOx1U5qQPv6ceuyiJYwmS86IW*l3BEaiyVCqFvju9BMll7!FHQeQholDsi0xqzCHuW!Qm2mrEtQPCv!qF3Sh9tZDjKcDZDI9iMByXc6R*J!JG4eCEUHIvEaxTQtftb4oc5uGpM!YyWT!r5jXIRyxqzsCULtWz4lsWHKzwrNlBRbF!A7ZXqXygCT8ek6luk7rarwLLJ!qaq2BvS; domain=login.live.com;secure= ;path=/;HTTPOnly= ;version=1
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);
}
else
{
// if any field fail, consider it is a abnormal cookie string, so quit with false
parsedOk = false;
break;
}
}
}
else
{
parsedOk = false;
}
return parsedOk;
}//parseSingleCookie
例 7.9. parseSingleCookie 的使用范例
Cookie ck = new Cookie();
// recover it back
string recoveredCookieStr = Regex.Replace(cookieStr, @"xpires=\w{3}" + replacedChar + @"\s\d{2}-\w{3}-\d{4}", new MatchEvaluator(_recoverExpireField));
if (parseSingleCookie(recoveredCookieStr, ref ck))
{
if (needAddThisCookie(ck, curDomain))
{
parsedCookies.Add(ck);
}
}