码迷,mamicode.com
首页 > Web开发 > 详细

asp.net下cookie 的基础使用

时间:2015-09-15 18:02:50      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

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(1);

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

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

HttpCookie aCookie = new HttpCookie("lastVisit");
aCookie.Value = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays(1);
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(1);

aCookie.Expires = DateTime.Now.AddDays(1);

DateTime dt = DateTime.Now; 
TimeSpan ts = new TimeSpan(1, 0, 0, 0);
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属于有一定风险的操作,因为数据会被长时间保存在客户端,一般情况下使用过程中关键数据如用户名密码都会选择加密存储。

 

asp.net下cookie 的基础使用

标签:

原文地址:http://www.cnblogs.com/tb007/p/4810634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!