我不知道管理员是否还一直在更新程序,我也是前不久才购买的,研究了一下。总觉得在Cookie的一些处理上不太合理。既然都买了,也在用着,我看论坛都没什么人了。也提点意见吧。1、IsUpdateCookie
这个功能,总觉得好鸡肋,直接把 String 的 Cookie 和 CookieCollection 相等了。在实际的运用过程中,至少在我实际运用的过程中,几乎从来没用过这种做法,除非该请求本身不带Cookie,这样操作无可厚非。但如果本身就有Cookie呢?
举例
[C#] 纯文本查看 复制代码 signinfo=4655aadasdfasdf3asfasdf
PHPSESSID=eedfefasdfadsfefasdfdas
这是请求时 String Cookie,当我请求后,Response的Header有一个 Set-Cookie 项,内容为
[C#] 纯文本查看 复制代码 PHPSESSID=abcdefghijklmn
,那么,IsUpdateCookie 的功能应该是把请求时带的 Cookie 的 【PHPSESSID】项修改为 Response.Headers["Set-Cookie"] 的对应的值,那么更新后 Cookie 的值就应该为
[C#] 纯文本查看 复制代码 signinfo=4655aadasdfasdf3asfasdf
PHPSESSID=abcdefghijklmn
这样我觉得才是应该的。
2、GetMergeCookie
这个就有点和我刚才说的那个差不多了。这里有一个去重,但去的是整个item,如果按照我的上一个例 ,那么同样会出现2个 PHPSESSID,这里是不是去重也要判断一下?或者定义一下Cookie的Name?如果相同,则保留 Cookie2 的对应的值?
[C#] 纯文本查看 复制代码 internal static string GetMergeCookie(string cookie1, string cookie2)
{
if (string.IsNullOrWhiteSpace(cookie1))//新的是空的
{
return cookie2;//返回老的
}
if (string.IsNullOrWhiteSpace(cookie2))//老的是空的
{
return cookie1;//返回新的
}
List<string> cookielist = new List<string>();//结果
string[] list_1 = cookie1.ToString().Split(';');
string[] list_2 = cookie2.ToString().Split(';');
foreach (string item in list_1)
{
//排除重复项
if (cookielist.Contains(item)) continue;
//对接Cookie基本的Key和Value串
cookielist.Add(string.Format("{0} ", item.Trim()));
}
foreach (string item in list_2)
{
//排除重复项
if (cookielist.Contains(item)) continue;
//对接Cookie基本的Key和Value串
cookielist.Add(string.Format("{0}", item));
}
return string.Join(";", cookielist);
}
当然,以上两个问题,要自己来解决都很简单,没有难度,处理一下就好了。但总归这整套一直在更新,自己写的这些方法,等下一次更新,又要自己来改一次,难免有点麻烦,所以想请管理员瞅瞅,看下次更新的时候,可否把上述问题看如何解决一下?如果说得不好或不对的地方,还请见谅。
|