摘自《Silverlight 2完美征程》第13章13.2.4节“操作Cookies”(作者:李会军)
利用Silverlight提供的HtmlDocument对象,可以轻松实现在Silverlight操作Cookies。使用SetProperty和GetProperty可以实现Cookies读写,并且在HtmlDocument中提供已经封装好的Cookies属性。
现在通过一个示例来展示一下如何实现Cookie的读写。编写一个简单的用户界面,使其看起来如图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
当单击“设置”按钮后,可以看到,在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 举报,一经查实,本站将立刻删除。