您將不得不使用反射來查看存儲在cookie容器中的Cookie。
使用類似這樣的東西來看看你有什麼,然後你可以嘗試子類來訪問你想要的數據,或者通過在存儲器中存儲cookie的過程,從容器中刪除它,然後將其添加爲普通Cookie
public List<Cookie> GetAllCookies(CookieContainer cc)
{
List<Cookie> lstCookies = new List<Cookie>();
Hashtable table = (Hashtable)cc.GetType().InvokeMember("m_domainTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, cc, new object[] { });
foreach (var pathList in table.Values)
{
SortedList lstCookieCol = (SortedList)pathList.GetType().InvokeMember("m_list", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, pathList, new object[] { });
foreach (CookieCollection colCookies in lstCookieCol.Values)
foreach (Cookie c in colCookies) lstCookies.Add(c);
}
return lstCookies;
}
public string ShowAllCookies(CookieContainer cc)
{
StringBuilder sb = new StringBuilder();
List<Cookie> lstCookies = GetAllCookies(cc);
sb.AppendLine("=========================================================== ");
sb.AppendLine(lstCookies.Count + " cookies found.");
sb.AppendLine("=========================================================== ");
int cpt = 1;
foreach (Cookie c in lstCookies)
sb.AppendLine("#" + cpt++ + "> Name: " + c.Name + "\tValue: " + c.Value + "\tDomain: " + c.Domain + "\tPath: " + c.Path + "\tExp: " + c.Expires.ToString());
return sb.ToString();
}
可以序列化整個'CookieContainer'(http://answers.flyppdevportal.com/categories/metro/csharpvb.aspx?id=d214c388-41de-44b7-8260-9e21f3fcb859),並在需要時重新使用整個容器嗎? – keyboardP 2013-04-06 13:46:11
您無法操作httponly cookie。只有在您發送http請求時纔會修改它們。這對於服務器和客戶端之間的安全通信至關重要。所以你所面對的這種行爲是正常的。 – user568109 2013-04-06 14:25:48
@keyboardP如果您將CookieContainer序列化,則在反序列化時不再發送Cookie。 – zi3guw 2013-04-06 15:29:59