### 使用 Cookie 对象保存和读取客户端信息

要存储一个 Cookie 变量，可以通过 Response 对象的 Cookies 集合，其使用语法如下。

Response. Cookies[varName].Value=值;

其中，varName 为变量名。

要取回 Cookie，使用 Request 对象的 Cookies 集合，并将指定的 Cookie 集合返回，其使用语法如下。

变量名=Request. Cookies[varName].Value;

下面示例分别通过 Response 对象和 Request 对象的 Cookies 属性将客户端的 IP 地址写入 Cookie 中并读取出来。执行程序，示例运行结果如图 1 所示。

图 1 Cookie 示例

程序实现的主要步骤：

新建一个网站，默认主页 Default.aspx，在 Default.aspx 页面上添加两个 Button 控件和一个 Label 控件，它们的属性设置如表 1 所示。

表 1 Default.aspx 页面中控件属性设置及其用途

控件类型 | 控件名称 | 主要属性设置 | 用途
标准/Label 控件 | Label1 |  | 显示用户 IP
标准/Button 控件 | btnWrite | Text 属性设置为“将用户 IP 写入 Cookie” | 将用户 IP 保存在 Cookie 中
标准/Button 控件 | btnRead | Text 属性设置为“将用户 IP 从 Cookie 中读出” | 将用户 IP 从 Cookie 中读出

单击【将用户 IP 写入 Cookie】按钮，将触发按钮的 Click 事件。在该事件中首先利用 Request 对象的 UserHostAddress 属性获取客户端 IP 地址，然后将 IP 保存到 Cookie 中。代码如下：

protected void btnWrite_Click(object sender, EventArgs e)

{

string UserIP = Request.UserHostAddress.ToString();

Response.Cookies["IP"].Value = UserIP;

}

单击【将用户 IP 从 Cookie 中读出】按钮，从 Cookie 中读出写入的 IP，代码如下：

protected void btnRead_Click(object sender, EventArgs e)

{

this.Label1.Text = Request.Cookies["IP"].Value;

}

由于 Cookie 对象可以保存和读取客户端的信息，用户可以通过它对登录的客户进行标识，防止用户恶意攻击网站。如：在线投票中，可以使用 Cookie，防止用户进行重复投票。

### 应用锦囊

#### 1．对 Cookie 中的数据加密

为了避免用户信息被他人窃取，增强网站的安全性，通常需要对 Cookie 中的数据进行加密。加密代码如下：

string data="对 Cookie 中的数据加密。";

Response.Cookies["data"].Value=Forms.Authentication.HashPasswordForStoringInConfigFile(data,"md5");

#### 2．创建及存取多个键值的 Cookie 对象

使用 Response 对象可以创建多个数据值的 Cookie，其语法格式如下：

Response.Cookies["CookieName"]["KeyName"]="Cookie 中相对索引键的数据值";

例如，使用 Response 对象的 Cookie 集合保存用户登录名和密码，其代码如下：

Response.Cookies["UserInfo"]["UserName"] = this.txtName.Text.Trim();

Response.Cookies["UserInfo"]["UserPwd"] = this.txtPassword.Text.Trim();

#### 3．设定 Cookie 变量的生命周期

虽然 Cookie 对象变量是存放在客户端计算机上，但是也不是永远不会消失。设计人员可以在程序中设定 Cookie 对象的有效日期，使用语法为：

Response.Cookies["CookieName"].Expires = 日期;

如果没有指定 Expires 属性，Cookie 变量将不会被保存，当关闭浏览器时，Cookie 变量也会随之消失。

¨ 下面的程序片段演示了几种设定有效期的方法：

//20 分钟后到期

TimeSpan ts = new TimeSpan(0, 0, 20, 0);

Response.Cookies["myCookie"].Expires = DateTime.Now.Add(ts);

//一个月后到期

Response.Cookies["myCookie"].Expires = DateTime.Now.AddMonths(1);

//指定有效日期

Response.Cookies["myCookie"].Expires = DateTime.Parse("10/26/2007");

//永远不过期

Response.Cookies["myCookie"].Expires = DateTime.MaxValue;

//关闭浏览器后过期

Response.Cookies["myCookie"].Expires = DateTime.MinValue;