65.9K
CodeProject 正在变化。 阅读更多。
Home

清除 Windows Phone 7 上的 Cookie 或如何退出 Facebook

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2010年10月25日

CC (Attr 3U)

2分钟阅读

viewsIcon

19875

一款适用于 Windows Phone 7 的集成 Facebook 的应用程序

和很多人一样,我一直在开发一个与 Facebook 集成的 Windows Phone 7 应用程序。现在我快要完成开发了,我正在研究一些超出核心功能的用例,例如退出 Facebook,以便用户可以使用不同的凭据。通常,你会获取相关 Facebook URL 的 Cookie 并清除它们。许多人在论坛上似乎遇到了和我一样的问题,即 Windows Phone 7 中没有直接的 API 来访问 WebBrowser 控件的 Cookie。我找到了一种解决方法,以下是我的做法

跟踪 Cookie

没有直接的 API 来获取 WebBrowser 控件的 Cookie,但你可以通过为 CookieContainer 属性提供一个值来访问特定 Web 请求的 Cookie。

   1:  private HttpWebRequest _webRequest;
   2:  private CookieContainer _cookieContainer = new CookieContainer();
   3:  ...
   4:  this._webRequest = (HttpWebRequest)HttpWebRequest.Create(uri);
   5:  this._webRequest.CookieContainer = this._cookieContainer;

你会注意到,我创建了一个 HttpWebRequest 和一个关联的 CookieContainer,并将该 CookieContainer 传递给 Web 请求。你需要做的就是保存这个 Web 请求,直到你的应用程序的生命周期结束,或者至少保存你上次用来访问 Facebook 的 Web 请求(具体取决于你的应用程序的繁忙程度以及你对 Web 请求的处理方式。我修改了我的应用程序代码,使用单个 Web 请求来覆盖整个应用程序的生命周期)。然后,你可以使用 CookieContainer 实例来查找相关的 Cookie。

查找和清除 Facebook 的 Cookie

为了跟踪 Facebook 的 Cookie,以便你可以清除它们,你需要向 CookieContainer 请求与特定 URL 匹配的 Cookie。我发现请求 https://login.facebook.com/login.php 就足够了,但结果可能因情况而异。我将此代码用于我的 WebClientHelper 类(该类保存我的 Web 请求)来清除指定 URL 的 Cookie

   1:  public void ClearCookies(Uri uri)
   2:  {
   3:      var cookies = this._cookieContainer.GetCookies(uri);
   4:      foreach (Cookie cookie in cookies)
   5:      {
   6:          cookie.Discard = true;
   7:          cookie.Expired = true;
   8:      }
   9:  }

我发现将 DiscardExpired 属性都设置为 true 即可清除 Cookie。其中任何一个属性单独使用也可能足够;我还没有机会验证这一点。

因此,调用此方法的代码如下所示

   1:  private static readonly Uri FacebookCookieUri = 
   new Uri("https://login.facebook.com/login.php");
   2:  ...
   3:  this._helper.ClearCookies(FacebookCookieUri);

如果你然后像往常一样将 WebBrowser 控件发送到 Facebook 的登录 URL,你应该会发现 Cookie 已被清除,并且用户会像往常一样看到登录对话框。
希望这有帮助。

© . All rights reserved.