- 软件开发视频大讲堂:ASP.NET从入门到精通(第4版)
- 明日科技
- 990字
- 2020-11-28 17:50:13
2.5 Cookie对象
2.5.1 Cookie对象概述
Cookie对象用于保存客户端浏览器请求的服务器页面,也可用于存放非敏感性的用户信息,信息保存的时间可以根据用户的需要进行设置。并非所有的浏览器都支持Cookie,并且数据信息是以文本的形式保存在客户端计算机中的。
2.5.2 Cookie对象的常用属性和方法
Cookie对象的常用属性及说明如表2.13所示。
表2.13 Cookie对象的常用属性及说明
Cookie对象的常用方法及说明如表2.14所示。
表2.14 Cookie对象的常用方法及说明
2.5.3 使用Cookie对象保存和读取客户端信息
要存储一个Cookie变量,可以通过Response对象的Cookies集合,其语法如下:
Response. Cookies[varName].Value=值;
其中,varName为变量名。
要取回Cookie,使用Request对象的Cookies集合,并将指定的Cookies集合返回,其语法如下:
变量名=Request. Cookies[varName].Value;
【例2.9】使用Cookie对象保存和读取客户端信息。(示例位置:TM\sl\02\09)
本示例分别通过Response对象和Request对象的Cookies属性将客户端的IP地址写入Cookie中并读取出来。执行程序,示例运行结果如图2.10所示。
图2.10 Cookie示例
程序实现的主要步骤如下。
新建一个网站,默认主页为Default.aspx,在Default.aspx页面上添加2个Button控件和1个Label控件,它们的属性设置及用途如表2.15所示。
表2.15 Default.aspx页面中的控件属性设置及用途
单击“将用户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,防止用户进行重复投票,详细介绍参见第21章。
技巧
(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;