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

asp.net下cookie 的基础使用的更多相关文章

  1. QQ浏览器、搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie、Session失效问题

    原文:QQ浏览器.搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie.Session失效问题 这些狗日的浏览器在兼容模式下,保存Cookie会失败,是因为SameSiteMode默认为La ...

  2. ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要

    ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm --  Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...

  3. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

  4. Asp.net操作cookie大全

    实例代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...

  5. asp.net各种cookie代码和解析

    Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...

  6. WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构

    原文:WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 细算起来,已经有好几个月没有真正的写过文章了.近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析>的写作,一直 ...

  7. ASP.NET中的C#基础知识

    ASP.NET中的C#基础知识 说明:asp.net作为一种开发框架现在已经广为应用,其开发的基础除了前端的html.css.JavaScript等后端最重要的语言支持还是C#,下面将主要用到的基础知 ...

  8. 你所不知道的ASP.NET Core MVC/WebApi基础系列(一)

    前言 最近发表的EF Core貌似有点多,可别误以为我只专攻EF Core哦,私下有时间也是一直在看ASP.NET Core的内容,所以后续会穿插讲EF Core和ASP.NET Core,别认为你会 ...

  9. ASP.NET下MVC设计模式的实现

    [转载]MVC架构在Asp.net中的应用和实现 转载自:http://www.cnblogs.com/baiye7223725/archive/2007/06/07/775390.aspx 摘要:本 ...

随机推荐

  1. XMPP我写底层协议(零)--废话和准备开幕前

    当我想写一个非常早期的一点总结.但总是忙没有时间停止做这样的事情. 秦与我的兄弟之前说的,这并不是说我没开灵.但是,因为很多事情还没有时间来写blog. 我没有完全理解,真到自己在这个位置上的时间,能 ...

  2. 改动symbol link的owner

    当/home/jenkins文件夹空间不足的时候,能够先查看哪个文件夹在较大的磁盘分区上,然后将jenkins文件夹移动过去 最后创建/home/jenkins link到新位置. 这时候须要改动sy ...

  3. DHCP Option 60 认识

    原文地址: http://blog.163.com/chenqioulin_1983/blog/static/83216232010109104430251/   首先还是看看RFC咋说的吧.DHCP ...

  4. HDU 1885 Key Task 国家压缩+搜索

    点击打开链接 Key Task Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. 【iOS】文件上传小记

    iOS由该系统提供API可以实现可以实现文件的上传和下载,有两种方法来. NSURLConnection与NSURLSession. 当中NSURLConnection是使用非常久的的一种方式.NSU ...

  6. CloudFoundry 中的GoRouter性能測试

    之前一直感觉CloudFoundry的GoRouter的性能不靠谱,或者我们的CloudFoundry 部署架构存在问题,想着进行一些压力測试,可是一直苦于没有压力測试的工具.上一周,部门须要出一个測 ...

  7. android看不见main函数怎么办?程序异常了,能够不提示“xxx软件停止执行”吗?

    今天遇到了这个问题,分享一下解决方式. android没有main 函数,自然也就不存在main里面加入异常处理来实现全局异常捕获的方案.那android程序有全局异常补货的解决方式吗? 答案是有的: ...

  8. Bug记录:微博的Java SDK返回经纬度错误

    现象:美国的坐标点可能会定位到西藏地区-后发现原来负经度经解析后,均变成正的! 源码: private void getGeoInfo(String geo) { StringBuffer value ...

  9. 最新jhost免费jsp云空间会员邀请码

    jhost支持jsp.php的免费云空间,邀请码用于激活空间服务: 邀请码:20141003104317_149661                  有效期:2014-10-03 http://w ...

  10. POJ 1984 Navigation Nightmare (数据结构-并检查集合)

    Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 4072   Accepted: 1 ...