使用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.aspxDefault.aspx页面上添加两个Button控件和一个Label控件,它们的属性设置如表1所示。

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

控件类型

控件名称

主要属性设置

用途

标准/Label控件

Label1

 

显示用户IP

标准/Button控件

btnWrite

Text属性设置为“将用户IP写入Cookie

将用户IP保存在Cookie

标准/Button控件

btnRead

Text属性设置为“将用户IPCookie中读出”

将用户IPCookie中读出

单击【将用户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;

}

       单击【将用户IPCookie中读出】按钮,从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;