### 尝尝 ASP.NET 中的小甜饼

Cookie 对于使用过 ASP 的读者来讲并不陌生，但是我们要讲的是在 ASP.NET 中的 Cookie。我们知道，Cookie 存在于用户计算机浏览器中，我们可以使用 Cookie 来存放一些很简单的数据。但是，有一点别说我没提醒你：记住这不是个好办法，因为用户可以在任何时间删除 Cookie 信息，也可以关闭 Cookie 功能。好了，开场白就这些。
使用 ASP.NET 我们可以很容易的对 Cookie 集合进行操作。它和 ASP 中的 Cookie 一样，都是附属于 Request 和 Response 对象的。Listing1 和 2 分别给出了如何读和写 Cookie 的方法。图 1 和 2 则是相应的显示。
Listing 1 这个文件的功能是写入 cookie
<%@ language="C#" %>
<HTML>
<script language="C#" runat="server">
void WriteClicked(Object Sender, EventArgs e)
{
//创建一个新 Cookie，其 cookie 名来自于 NameField.Text
HttpCookie cookie = new HttpCookie(NameField.Text);
//设定 Cookie 的值
cookie.Value = ValueField.Text;
//设定 cookie 生命为 1 minute，TimeSpan()是一个专门设定时间间隔的类，我们定义了其实例 tsMinute
DateTime dtNow = DateTime.Now;
TimeSpan tsMinute = new TimeSpan(0, 0, 1, 0);
cookie.Expires = dtNow + tsMinute;
//添加 Cookie
Response.Cookies.Add(cookie);
Response.Write("Cookie written. <br><hr>");
}
</script>
<body>
<h3>
Use the button below to write cookies to your browser
</h3>
The cookies will expire in one minute.
<form runat="server" ID="Form1">
Cookie Name
<asp:textbox id="NameField" runat="server" />
<br>
Cookie Value
<asp:textbox id="ValueField" runat="server" />
<br>
<asp:button text="WriteCookie" onclick="WriteClicked" runat="server" ID="Button1" />
<br>
</form>
<a href="readcookies.aspx">Read the cookies</a>
</body>
</HTML>
图 1
Listing 2 这个文件是为了读取刚才写入的 cookie 值
<%@ language="C#" %>
<script runat="server">
void ReadClicked(Object Sender, EventArgs e)
{
//取得想要的 Cookie 名
String strCookieName = NameField.Text;
//取得此 Cookie 名对应的对象，注意目前的得到的 cookie 是个对象
HttpCookie cookie = Request.Cookies[strCookieName];
//检验 Cookie 是否已经存在
if (null == cookie) {
Response.Write("Cookie not found. <br><hr>");
}
else {
//显示 Cookie 的值
String strCookieValue = cookie.Value.ToString();
Response.Write("The " + strCookieName + " cookie contains: <b>"
+ strCookieValue + "</b><br><hr>");
}
}
</script>
<html>
<body>
Use the button below to read a cookie
<br>
<form runat="server" ID="Form1">
Cookie Name
<asp:textbox id="NameField" runat="server" />
<asp:button text="ReadCookie" onclick="ReadClicked" runat="server" ID="Button1" />
</form>
<a href="writecookies.aspx">Write Cookies</a>
</body>
</html>
图 2
为了更好的了解 cookie 的读写，代码分析如下。
在 Listing 1 中，为了将 cookie 写入用户的浏览器，我们调用了 HttpCookie 对象，并且建立了一个 HttpCookie 对象的实例 cookie，写入 cookie 时，我们使用了 Response.Cookies 对象的方法 Add()，最后我们设定了此 cookie 的生命期限为一分钟。
在 Listing 2 中，我们尝试了读取 Cookie 的方法。很简单，就是访问了 Request.Cookies 集合。
Cookie 只能存放 string 类型的数据，如果想要存放更为复杂的数据类型，那么必须先将其转换为 string 类型。提示一种办法可以向 Cookie 写入复杂的数据类型，就是将想存放的复杂数据类型转化为 XML 串，然后写入 Cookie。另外，我们还可以在一个 cookie 中存储多个值，在此就不多说了，留给有兴趣的读者去研究吧。