微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight 2实战技巧之“操作Cookies”

摘自《Silverlight 2完美征程》第13章13.2.4节“操作Cookies”(作者:李会军)


利用Silverlight提供的HtmlDocument对象,可以轻松实现在Silverlight操作Cookies。使用SetProperty和GetProperty可以实现Cookies读写,并且在HtmlDocument中提供已经封装好的Cookies属性
现在通过一个示例来展示一下如何实现Cookie的读写。编写一个简单的用户界面,使其看起来如图13-6所示。

图13-6

图13-6
编写设置Cookies的实现,得到Cookies字符串之后,使用SetProperty方法写入Cookies,如下面的示例代码所示:
C#
void btnSet_Click(object sender,RoutedEventArgs e)
{
    DateTime expiration = DateTime.UtcNow + TimeSpan.FromDays(2000);
    String cookie = String.Format("{0}={1};expires={2}",
                    this.txtKey.Text,
                    this.txtValue.Text,
                    expiration.ToString("R"));

    HtmlPage.Document.SetProperty("cookie",cookie);
}
编写读取Cookie的实现,如下面的示例代码所示:
C#
void btnRead_Click(object sender,RoutedEventArgs e)
{
    String[] cookies = HtmlPage.Document.Cookies.Split(';');

    String key = this.txtKey.Text;
    key += '=';

    foreach (String cookie in cookies)
    {
        String cookieStr = cookie.Trim();

        if (cookieStr.StartsWith(key,StringComparison.OrdinalIgnoreCase))
        {
            String[] vals = cookieStr.Split('=');
            if (vals.Length >= 2)
            {
                this.txtValue.Text = vals[1];
            }
        }
    }
}
编写删除Cookies的实现,只要设置Cookies的过期时间即可,如下面的示例代码所示:
C#
void btnDelete_Click(object sender,RoutedEventArgs e)
{
    String oldCookie = HtmlPage.Document.GetProperty("cookie") as String;
    DateTime expiration = DateTime.UtcNow - TimeSpan.FromDays(1);

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

    HtmlPage.Document.SetProperty("cookie",cookie);
}
运行效果如图13-7所示。

图13-7

图13-7
当单击“设置”按钮后,可以看到,在Temporary Internet Files文件夹中写入了Cookies。
项目开发中可能会经常用到Cookies操作,笔者总结了一个简单的Silverlight 2中操作Cookies帮助类,大家可以直接在自己的项目中使用,主要有如下几个功能
写入Cookies
读取Cookies
删除Cookies
判断Cookies键值是否存在
该Cookies的帮助类完整代码如下所示:
C#
public class CookiesUtils
{
    public static void SetCookie(String key,String value)
    {
        SetCookie(key,value,null,false);
    }

    public static void SetCookie(String key,String value,TimeSpan expires)
    {
        SetCookie(key,expires,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 2完美征程》已上市,本书配套网站:http://www.dotneteye.cn/silverlight/。您可从中获取关于本书的样章、源代码以及相关信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐