电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

在Silverlight应用程序中操作Cookie


发布日期:2021/5/8
 

概述

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

}

}

上一篇:WinForm特效:拦截窗体上各个部位的点击

下一篇:Page.Ispostback属性详解