保留在Windows Phone中HTTPOnly饼干(Preserving HTTPOnly co

2019-07-22 13:01发布

我有一个通过HTTPS发送一个用户名和密码的API的应用程序。 该API返回中HTTPOnly饼干。

这意味着,饼干是“看不见”的代码,但仍然存在并在随后的请求将被发送到服务器。

Set-Cookie头从剥离HttpWebResponse.Headers和cookie不出现在HttpWebResponse.Cookie S或在HttpWebRequest.CookieContainer 。 但是,如果后续请求使用同一制造HttpWebRequest.CookieContainer它们被发送到服务器,但无法访问它们的代码。

据我所知,这使得他们无法序列化或保存在任何方面。 这似乎使这一工作将缓存实际的用户名和密码,每次重新登录的唯一途径。

有什么我失踪?

Answer 1:

你将不得不使用反射来看看存储在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();
    }


Answer 2:

也可以尝试使用TCP套接字来直接获取饼干。 这是我的一个类似的问题的答案: https://stackoverflow.com/a/21737087/262036

一旦你得到了响应,解析字符串中搜索的cookie,抓住价值。 之后,你可以创建在的CookieContainer一个新的cookie,是不是仅Http和下一请求中使用它。



文章来源: Preserving HTTPOnly cookies on Windows Phone