更新1:經過更多的研究,我不確定這是可能的,I created a UserVoice entry on fixing it。Windows Phone 7芒果保存CookieContainer的狀態
我試圖在應用程序退出時保存CookieContainer,或發生墓碑事件時發生,但我遇到了一些問題。
I've tried to save CookieContainer in the AppSettings but when loaded, the cookies are gone。
Researching this internally, DataContractSerializer cannot serialize cookies.
This seems to be a behavior that Windows Phone inherited from Silverlight's DataContractSerializer.
在做了更多的研究之後,看起來周圍的工作就是從容器中獲取cookie並以另一種方式保存它們。這工作得很好,直到我打另一個障礙。我無法使用.mydomain.com的URI訪問GetCookies。我相信這是因爲this bug。我可以在域表中看到cookie,.mydomain.com,但GetCookies無法在該特定的cookie上工作。
還擁有讓餅乾從容器的問題太多 時域始於:
CookieContainer container = new CookieContainer();
container.Add(new Cookie("x", "1", "/", ".blah.com"));
CookieCollection cv = container.GetCookies(new Uri("http://blah.com"));
cv = container.GetCookies(new Uri("http://w.blah.com"));
我發現了一個變通方法,使用反射遍歷domaintable並刪除'。'字首。
private void BugFix_CookieDomain(CookieContainer cookieContainer)
{
System.Type _ContainerType = typeof(CookieContainer);
var = _ContainerType.InvokeMember("m_domainTable",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.GetField |
System.Reflection.BindingFlags.Instance,
null,
cookieContainer,
new object[] { });
ArrayList keys = new ArrayList(table.Keys);
foreach (string keyObj in keys)
{
string key = (keyObj as string);
if (key[0] == '.')
{
string newKey = key.Remove(0, 1);
table[newKey] = table[keyObj];
}
}
}
只有當調用InvokeMember時,纔會在SL中拋出MethodAccessException。這並不能真正解決我的問題,因爲我需要保留的cookie之一是HttpOnly,這是CookieContainer的原因之一。
如果服務器發送中HTTPOnly Cookie,您應該請求創建一個 System.Net.CookieContainer舉行餅乾, 雖然你不會看到或能夠訪問存儲在 餅乾容器。
那麼,有什麼想法?我錯過了一些簡單的東西嗎是否有另一種方法來保存CookieContainer的狀態,還是需要保存用戶信息(包括密碼),並在每次應用程序啓動時以及從墓碑中恢復時重新驗證它們?
是的,你會認爲這將是一件簡單的事情。 –
運氣不錯是正確的。 –