// parse cookie field expression
public bool parseCookieField(string ckFieldExpr, out pairItem pair)
{
bool parsedOK = false;
if (ckFieldExpr == "")
{
pair.key = "";
pair.value = "";
parsedOK = false;
}
else
{
ckFieldExpr = ckFieldExpr.Trim();
//some specials: secure/httponly
if (ckFieldExpr.ToLower() == "httponly")
{
pair.key = "httponly";
//pair.value = "";
pair.value = "true";
parsedOK = true;
}
else if (ckFieldExpr.ToLower() == "secure")
{
pair.key = "secure";
//pair.value = "";
pair.value = "true";
parsedOK = true;
}
else // normal cookie field
{
int equalPos = ckFieldExpr.IndexOf('=');
if (equalPos > 0) // is valid expression
{
pair.key = ckFieldExpr.Substring(0, equalPos);
pair.key = pair.key.Trim();
if (isValidCookieField(pair.key))
{
// only process while is valid cookie field
pair.value = ckFieldExpr.Substring(equalPos + 1);
pair.value = pair.value.Trim();
parsedOK = true;
}
else
{
pair.key = "";
pair.value = "";
parsedOK = false;
}
}
else
{
pair.key = "";
pair.value = "";
parsedOK = false;
}
}
}
return parsedOK;
}//parseCookieField
例 7.8. parseCookieField 的使用范例
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;
}
}