概述 很多朋友来信问如何在Silverlight 中操作Cookie这里专门写篇文章介绍一下为了实现在Silverlight应用程序中对于Cookie的操作我们需要借助于HtmlPageDocument对象 在使用HtmlPageDocument之前请先添加SystemWindowsBrowser命名空间本文介绍了如何在Silverlight应用程序中操作Cookie并在最后给出了一个操作Cookie的公用类大家可以直接在自己的应用程序中使用 写入Cookie 在Silverlight 应用程序中我们可以通过HtmlPageDocumentSetProperty方法来设置Cookie或者使用HtmlPageDocument对象的Cookies属性(后面会讲到)如下代码所示 void btnSet_Click(object sender RoutedEventArgs e) { DateTime expir = DateTimeUtcNow + TimeSpanFromDays(); String cookie = StringFormat({}={};expires={} thistxtKeyText thistxtValueText expirToString(R)); HtmlPageDocumentSetProperty(cookie cookie); } 这里设置Cookie的过期时间为一周除了设置过期时间外还可以设置domainpath等后面的帮助类中你将看到这一点 如使用下面的界面写入Cookie 读取Cookie 我们可以通过HtmlPageDocumentGetProperty方法来获取所有Cookie另外在HtmlDocument中定义了Cookies属性已经为我们封装好了GetProperty方法可以直接使用它的定义如下代码所示 public sealed class HtmlDocument : HtmlObject { public string Cookies { get{ HtmlPageVerifyThread(); String property = thisGetProperty(cookie) as String; if (property != null) { return property; } return StringEmpty; } set{ HtmlPageVerifyThread(); String str = value; if (StringIsNullOrEmpty(str)) { str = stringEmpty; } thisSetProperty(cookie str); } } } 如使用下面这段代码来获取一个指定Key的Cookie值 void btnRetrieve_Click(object sender RoutedEventArgs e) { String[] cookies = HtmlPageDocumentCookiesSplit(;); foreach (String cookie in cookies) { String[] keyValues = cookieSplit(=); if (keyValuesLength == ) { if (keyValues[]Trim() == thistxtKeyTextTrim()) { thistxtValueText = keyValues[]; } } } } 如下图所示 删除Cookie 删除Cookie非常简单清空Cookie的值并设置它的过期时间如下代码所示 void btnDelete_Click(object sender RoutedEventArgs e) { DateTime expir = DateTimeUtcNow TimeSpanFromDays(); string cookie = StringFormat({}=;expires={} thistxtKeyText expirToString(R)); HtmlPageDocumentSetProperty(cookie cookie); } Cookie帮助类 由于在开发中我们可能会经常用到对于Cookie的操作我在这里总结了一个简单的Silverlight中操作Cookie帮助类大家可以直接在自己的项目中使用主要有如下几个功能 写入Cookie 读取Cookie 删除Cookie 判断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(); cookieAppend(StringConcat(key = value)); if (expiresHasValue) { DateTime expire = DateTimeUtcNow + expiresValue; cookieAppend(StringConcat(;expires= expireToString(R))); } if (!StringIsNullOrEmpty(path)) { cookieAppend(StringConcat(;path= path)); } if (!StringIsNullOrEmpty(domain)) { cookieAppend(StringConcat(;domain= domain)); } if (secure) { cookieAppend(;secure); } HtmlPageDocumentSetProperty(cookie cookieToString()); } public static string GetCookie(String key) { String[] cookies = HtmlPageDocumentCookiesSplit(;); String result = (from c in cookies let keyValues = cSplit(=) where keyValuesLength == && keyValues[]Trim() == keyTrim() select keyValues[])FirstOrDefault(); return result; } public static void DeleteCookie(String key) { DateTime expir = DateTimeUtcNow TimeSpanFromDays(); string cookie = StringFormat({}=;expires={} key expirToString(R)); HtmlPageDocumentSetProperty(cookie cookie); } public static bool Exists(String key String value) { return HtmlPageDocumentCookiesContains(StringFormat({}={} key value)); } } |