Windows Phone Cookie

在wp7上添加Cookie请求头可以使用下面的方法:

HttpWebRequest request = System.Net.HttpWebRequest.Create("https://myurl.com"as HttpWebRequest

request.Headers["Cookie"] = "CookieName=CookieValue";

 

在wp7上使用下面的方法来添加Cookie请求头是不成功的:

HttpWebRequest request = System.Net.HttpWebRequest.Create("https://myurl.com"as HttpWebRequest

Cookie c = new Cookie("MyCookieName", myToken, "[valid path]""[valid domain]");
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(new Uri("http://myurl.com"), c);

怎么删除windows phone 7.5 Webbrowser的Cookie

private void btnlogout_Click(object sender, RoutedEventArgs e)
{
    string logout = Showalltopic.logoutString;
    webBrowser11.Source = new Uri("http://mydomain.com/login.php?do=logout&logouthash="+logout);
    webBrowser11.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(webBrowser11_LoadCompleted);
    btnlogin.Visibility = System.Windows.Visibility.Visible;
    btnlogout.Visibility = System.Windows.Visibility.Collapsed;
}

void webBrowser11_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    string content = webBrowser11.SaveToString();
    if (content.Contains("All cookies cleared!"))
    {
        MessageBox.Show("Logout success");
        webBrowser11.Navigate(new Uri("http://mydomain.com/", UriKind.Absolute));
    }
    System.IO.IsolatedStorage.IsolatedStorageSettings _appSetting =
        System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings;
    _appSetting.Clear();
    _appSetting.Save();
}


Set cookie to WebBrowser control

在Windows Phone Control有个WebBrowser控制项,用来提供可以在应用程式中载入网页有点像是iframe,在WebBrowser区域裡同样可以透过触控进行缩放滚动,达到一个类似在浏览器裡浏览网页般的效果,此外WebBrowser控制项也可以挂载本机网页文件档案直接做浏览。

  然而从官方文件上可以发现WebBrowser控制项对于Cookie的操控,只提供了 GetCookies的Method,却没有跟Set Cookies有关的Method or Event可以使用,那么如果想要针对WebBrowser在浏览网页时Add Cookies,该如何达成呢?

  Demo:

  利用HttpWebRequest.CookieContainer加入Cookie

string uri = "http://localhost:2012/About.aspx";

// 建構函式
public MainPage()
{
    InitializeComponent();

    SetCookie();
}

private void SetCookie()
{
    // Create a HttpWebRequest & add a cookie
    HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
    webrequest.CookieContainer = new CookieContainer();
    webrequest.CookieContainer.Add(new Uri(uri), new Cookie("Name""Ian"));

    // Send the request
    webrequest.BeginGetResponse(new AsyncCallback(ReadCallback), webrequest);
}

  透过非同步AsyncCallback进行HttpWebResponse.GetResponseStream取得网页Stream由于是利用另一个执行绪WebRequest进行Add Cookie & 取回网页Stream,因此再利用Dispatcher.BeginInvoke对WebBrowser进行网页档案的挂载

private void ReadCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);

    using (StreamReader httpwebStreamReader = new StreamReader(response.GetResponseStream()))
    {
        string results = httpwebStreamReader.ReadToEnd();
        Deployment.Current.Dispatcher.BeginInvoke(delegate() { webBrowser1.NavigateToString(results); });
    }
}

接着我们在About.aspx裡测试是否可以取得Cookies Value

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.Cookies["Name"] != null)
    {
        this.TextBox1.Text = Request.Cookies["Name"].Value;
    }
    else
    {
        this.TextBox1.Text = "No Cookie";
    }
}

结论:

  透过这样的方式,应用程式就可以Add Cookie To WebBrowser,虽然是麻烦了点,只是为何Windows Phone 裡的WebBroswer不提供Set Cookie的Method,不知是否跟安全性有关?

 
posted @ 2013-03-08 01:26  木木船长  阅读(205)  评论(0)    收藏  举报