首页 技术 正文
技术 2022年11月24日
0 收藏 794 点赞 4,640 浏览 2302 个字

cookie作为在B/S开发中经常被使用到的东西,asp.net必然提供了现成的东西给我们使用。

就是这个对象:HttpCookie,当然了,对于asp.net来说,Request和Response中也有cookie对象。

首先闹清楚什么是cookie:

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义。

那么在asp.net下如何使用cookie呢?

第一是创建:asp.net下有两种方法:

第一是直接在response对象中操作cookies对象:

Response.Cookies["userName"].Value = "patrick"; 
Response.Cookies["userName"].Expires = DateTime.Now.AddDays();

既然是键值对的存在,我们就可以直接创建一个key所对应的value,关于cookie过期时间的问题我们稍后研究。

第二是创建一个cookie对象,并将其添加到response对象中:

HttpCookie aCookie = new HttpCookie("lastVisit");
aCookie.Value = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays();
Response.Cookies.Add(aCookie);

这种方式个人比较推荐,虽然看起来代码多一点,但是易读性比较高。

cookie最终都需要发送到客户端才能开始使用。在response对象中添加完cookie对象,必须要等到userAgent(一般是浏览器)解析完成请求后,cookie才会被写入客户端,以IE为例,cookie是被写入到Internet临时文件夹内了,那么以后的请求cookie就会被发送至服务端。

然后我们才可以真正的把cookie利用起来,操作cookie有很多手法,这里只记录在服务端的方式,对于asp.net来说,request对象中的cookies记录了所有发送过来的cookie,从而形成了一个集合。

使用起来很常规的键值对取值方式:

if(Request.Cookies["userName"] != null)
{
HttpCookie aCookie = Request.Cookies["userName"];
string cTemp=Server.HtmlEncode(aCookie.Value);
//string cTemp=Request.Cookies["userName"].Values["name"];
}

这种类似方式相信大家在c#中已经使用了无数次,唯一不太一样的就是注释中的那种取值方式。因为在这个例子中我们一个cookie对象中只存了一个键值对,实际上一个cookie对象中可以存在n个键值对,所以,如果有多个键值对,是不能简单的用Value来取值的,当然上面的方法也可以在多个值当中获取指定的值。核心在于使用cookie对象中的Values而非Value。

ok,取到值了,那么去做我们想做的事吧,勇敢点,什么都可以的……

然后我们来简单的讨论下cookie的过期时间:

默认情况下,即不设置cookie的过期时间,cookies失效时间是直到关闭浏览器,也就相当于会话关闭时清除cookie。我们也可以自己设置cookie的过期时间:

Response.Cookies["userName"].Expires = DateTime.Now.AddDays();aCookie.Expires = DateTime.Now.AddDays();DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(, , , );
cookie.Expires = dt.Add(ts);

以上就是设置过期时间的方式,其实差距不大,就是设置Expires属性,cookie 的是有效时间是从创建时开始算起的。根据情况可以灵活设置。时间操作方法很多,这里友情提示下,不建议使用:Response.Cookies(“字段名”).expires=时间函数+N这种方式来设置过期时间,某位大神的资料中提到过,这种方式会出现无法显示网页或者500错误,比较推荐用DateTime对象的add函数来设置过期时间。

最后还有一个问题就是删除cookie:ASP.NET中不能直接删除用户计算机中的 Cookie。但是,可以通过将 Cookie 的到期日期设置为过去的日期,让用户的浏览器来删除Cookie。当用户下一次向设置该 Cookie 的域或路径内的页发出请求时,浏览器将确定该 Cookie 已到期并将其移除。

调用 Cookies集合的 Remove方法可从服务器端的集合中删除Cookie,使 Cookie 不会被发送至客户端。但是,如果客户端已存在 Cookie,就需要设置过期时间,在请求发送至客户端后cookie会在客户端被删除掉。

myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);

以上代码是设置cookie过期的方式。

提醒:cookie操作建议大家想好再动手,本身cookie属于有一定风险的操作,因为数据会被长时间保存在客户端,一般情况下使用过程中关键数据如用户名密码都会选择加密存储。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,953
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,478
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,290
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,107
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,739
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,773