如何在Windows Phone 7中管理Facebook的Cookies

在开发Windows Phone 7应用程序时,可能会遇到需要让用户使用不同凭证登录Facebook的情况。传统的方法是获取相关Facebook URL的cookies并清除它们。然而,对于WebBrowser控件,Windows Phone 7并没有提供直接的API来访问cookies。尽管如此,还是找到了一种方法来绕过这个限制。以下是如何实现的步骤:

跟踪Cookies

虽然WebBrowser控件没有直接的API来获取cookies,但可以通过设置特定web请求的CookieContainer属性来访问cookies。以下是如何创建HttpWebRequest和关联的CookieContainer,并将CookieContainer传递给web请求的示例代码:

private HttpWebRequest _webRequest; private CookieContainer _cookieContainer = new CookieContainer(); ... this._webRequest = (HttpWebRequest)HttpWebRequest.Create(uri); this._webRequest.CookieContainer = this._cookieContainer;

在这里,创建了一个HttpWebRequest和一个关联的CookieContainer,并将这个CookieContainer传递给web请求。需要在整个应用程序的生命周期内保留这个web请求,或者至少保留最后一次用来访问Facebook的web请求(这取决于应用程序的繁忙程度以及对web请求的使用情况。成功地将应用程序代码修改为在整个应用程序生命周期内使用单个web请求)。然后可以使用CookieContainer实例来找到相关的cookies。

查找并清除Facebook的Cookies

为了找到并清除Facebook的cookies,需要请求CookieContainer提供与特定URL匹配的cookies。发现请求https://login.facebook.com/login.php就足够了,但可能需要根据应用程序进行调整。以下是在WebClientHelper类中使用的代码,用于清除指定URL的cookies:

public void ClearCookies(Uri uri) { var cookies = this._cookieContainer.GetCookies(uri); foreach(Cookie cookie in cookies) { cookie.Discard = true; cookie.Expired = true; } }

发现将Discard和Expired属性都设置为true就足以清除cookies。也许单独设置其中一个属性就足够了,但没有机会验证这一点。

调用清除Cookies的方法

以下是调用这个方法的代码示例:

private static readonly Uri FacebookCookieUri = new Uri("https://login.facebook.com/login.php"); ... this._helper.ClearCookies(FacebookCookieUri);
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485