簡體   English   中英

在Windows Phone上保留HTTPOnly cookie

[英]Preserving HTTPOnly cookies on Windows Phone

我有一個應用程序通過HTTPS向API發送用戶名和密碼。 API返回HTTPOnly cookie。

這意味着cookie對代碼“不可見”,但仍然存在,並將在后續請求中發送到服務器。

HttpWebResponse.Headers剝離Set-Cookie標頭,並且cookie不會出現在HttpWebResponse.CookieHttpWebRequest.CookieContainer 但是,如果使用相同的HttpWebRequest.CookieContainer進行后續請求,則會將它們發送到服務器,但代碼無法訪問它們。

據我所知,這使得它們無法以任何方式序列化或保存。 看來,使這項工作的唯一方法是緩存實際的用戶名和密碼,每次都重新登錄。

有什么我想念的嗎?

您必須使用反射來查看存儲在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();
    }

您也可以嘗試使用TCP套接字直接獲取cookie。 以下是我對類似問題的回答: https//stackoverflow.com/a/21737087/262036

獲得響應后,您將解析字符串以搜索cookie並獲取值。 之后,您可以在CookieContainer中創建一個不是HttpOnly的新cookie,並在下一個請求中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM