彩票走势图

在Silverlight应用程序中操作Cookie

转帖|其它|编辑:郝浩|2011-04-22 15:02:58.000|阅读 570 次

概述:本文介绍了在Silverlight应用程序中如何操作Cookie,希望对大家有所帮助。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

概述

  很多朋友来信问如何在Silverlight 2中操作Cookie,这里专门写篇文章介绍一下。为了实现在Silverlight应用程序中对于Cookie的操作,我们需要借助于HtmlPage.Document对象。

  在使用HtmlPage.Document之前,请先添加System.Windows.Browser命名空间。本文介绍了如何在Silverlight应用程序中操作Cookie,并在最后给出了一个操作Cookie的公用类,大家可以直接在自己的应用程序中使用。

写入Cookie

  在Silverlight  应用程序中,我们可以通过HtmlPage.Document.SetProperty方法来设置Cookie或者使用HtmlPage.Document对象的Cookies属性(后面会讲到),如下代码所示:

void btnSet_Click(object sender, RoutedEventArgs e)
{
     DateTime expir = DateTime.UtcNow + TimeSpan.FromDays(7);

     String cookie = String.Format( "{0}={1};expires={2}",
     this.txtKey.Text,
     this.txtValue.Text, 
     expir.ToString( "R"));

     HtmlPage.Document.SetProperty( "cookie", cookie);
}

  这里设置Cookie的过期时间为一周,除了设置过期时间外还可以设置domain、path等,后面的帮助类中你将看到这一点。

  如使用下面的界面写入Cookie:

TerryLee_0146

读取Cookie

  我们可以通过HtmlPage.Document.GetProperty方法来获取所有Cookie,另外在HtmlDocument中定义了Cookies属性,已经为我们封装好了GetProperty方法,可以直接使用,它的定义如下代码所示:

public sealed class HtmlDocument : HtmlObject
{
     public string Cookies
     {
         get{
             HtmlPage.VerifyThread();
             String property = this.GetProperty( "cookie") as String;
             if (property != null)
             {
                 return property;
             }
             return String.Empty;
         }
         set{
             HtmlPage.VerifyThread();
             String str = value;
             if (String.IsNullOrEmpty(str))
             {
                 str = string.Empty;
             }
             this.SetProperty( "cookie", str);
         }
     }
}

  如使用下面这段代码来获取一个指定Key的Cookie值:

void btnRetrieve_Click(object sender, RoutedEventArgs e)
{
     String[] cookies = HtmlPage.Document.Cookies.Split(';');
     foreach (String cookie in cookies)
     {
         String[] keyValues = cookie.Split('=');
         if (keyValues.Length == 2)
         {
             if (keyValues[0].Trim() == this.txtKey.Text.Trim())
             {
                 this.txtValue.Text = keyValues[1];
             }
         }
     }
}

  如下图所示:

TerryLee_0147

删除Cookie

  删除Cookie非常简单,清空Cookie的值并设置它的过期时间,如下代码所示:

void btnDelete_Click(object sender, RoutedEventArgs e)
{
     DateTime expir = DateTime.UtcNow - TimeSpan.FromDays(1);
     string cookie = String.Format( "{0}=;expires={1}",
         this.txtKey.Text, expir.ToString( "R"));
     HtmlPage.Document.SetProperty( "cookie", cookie);
}

Cookie帮助类

  由于在开发中,我们可能会经常用到对于Cookie的操作,我在这里总结了一个简单的Silverlight中操作Cookie帮助类,大家可以直接在自己的项目中使用,主要有如下几个功能:

  1.写入Cookie

  2.读取Cookie

  3.删除Cookie

  4.判断Cookie是否存在

  当然如果你还有别的需求,可以再进一步完善,完整的代码如下:

public class CookiesUtils
{
     public static void SetCookie(String key, String value)
     {
         SetCookie(key, value, null, null, null, false);
     }

     public static void SetCookie(String key, String value, TimeSpan expires)
     {
         SetCookie(key, value, expires, null, null, false);
     }

     public static void SetCookie(String key, String value, TimeSpan? expires,
         String path, String domain, bool secure)
     {
         StringBuilder cookie = new StringBuilder();
         cookie.Append(String.Concat(key,  "=", value));

         if (expires.HasValue)
         {
             DateTime expire = DateTime.UtcNow + expires.Value;
             cookie.Append(String.Concat( ";expires=", expire.ToString("R")));
         }

         if (!String.IsNullOrEmpty(path))
         {
             cookie.Append(String.Concat( ";path=", path));
         }

         if (!String.IsNullOrEmpty(domain))
         {
             cookie.Append(String.Concat( ";domain=", domain));
         }

         if (secure)
         {
             cookie.Append( ";secure");
         }

         HtmlPage.Document.SetProperty( "cookie", cookie.ToString()); 
     }

     public static string GetCookie(String key)
     {
         String[] cookies = HtmlPage.Document.Cookies.Split(';');

         String result = (from c in cookies
                         let keyValues = c.Split('=')
                         where keyValues.Length == 2  && keyValues[0].Trim() == key.Trim()
                         select keyValues[1]).FirstOrDefault();
         return result;
     }

     public static void DeleteCookie(String key)
     {
         DateTime expir = DateTime.UtcNow - TimeSpan.FromDays(1);

         string cookie = String.Format( "{0}=;expires={1}",
             key, expir.ToString( "R"));

         HtmlPage.Document.SetProperty( "cookie", cookie);
     }

     public static bool Exists(String key, String value)
     {
         return HtmlPage.Document.Cookies.Contains(String.Format( "{0}={1}", key, value));
     }
}

总结

  本文介绍了在Silverlight应用程序中如何操作Cookie,希望对大家有所帮助。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP