ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在Silverlight应用程序中操作Cookie

在Silverlight应用程序中操作Cookie

原创 Linux操作系统 作者:iDotNetSpace 时间:2009-05-11 16:49:40 0 删除 编辑
概述

        很多朋友来信问如何在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:



 

        读取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];
                    }
                }
            }
        } 

如下图所示:



 

        删除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));
            }
        } 
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-594744/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5309126