在Windows Phone上保留HTTPOnly cookie

我有一个应用程序通过HTTPS向API发送用户名和密码。 API返回HTTPOnly cookie。

这意味着cookie对代码“不可见”,但仍然存在,并将在后续请求中发送到服务器。

HttpWebResponse.Headers剥离Set-Cookie标头,并且cookie不会出现在HttpWebResponse.CookieHttpWebRequest.CookieContainer 。 但是,如果使用相同的HttpWebRequest.CookieContainer进行后续请求,则会将它们发送到服务器,但代码无法访问它们。

据我所知,这使得它们无法以任何方式序列化或保存。 看来,实现这项工作的唯一方法是缓存实际的用户名和密码,每次都重新登录。

有什么我想念的吗?

您必须使用reflection来查看存储在cookie容器中的Cookie。

使用这样的东西看看你有什么,然后你可以尝试子类来获取你想要的数据,或者通过将cookie存储在内存中,从容器中删除它,然后添加为一个普通的cookie

  public List GetAllCookies(CookieContainer cc) { List lstCookies = new List(); 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 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(); } 

您也可以尝试使用TCP套接字直接获取cookie。 以下是我对类似问题的回答: https : //stackoverflow.com/a/21737087/262036

获得响应后,您将解析字符串以搜索cookie并获取值。 之后,您可以在CookieContainer中创建一个不是HttpOnly的新cookie,并在下一个请求中使用它。