asp.net下cookie 的基础使用
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 的基础使用的更多相关文章
- QQ浏览器、搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie、Session失效问题
原文:QQ浏览器.搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie.Session失效问题 这些狗日的浏览器在兼容模式下,保存Cookie会失败,是因为SameSiteMode默认为La ...
- ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要
ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm -- Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...
- .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息
在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...
- 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 ...
- asp.net各种cookie代码和解析
Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...
- WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
原文:WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 细算起来,已经有好几个月没有真正的写过文章了.近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析>的写作,一直 ...
- ASP.NET中的C#基础知识
ASP.NET中的C#基础知识 说明:asp.net作为一种开发框架现在已经广为应用,其开发的基础除了前端的html.css.JavaScript等后端最重要的语言支持还是C#,下面将主要用到的基础知 ...
- 你所不知道的ASP.NET Core MVC/WebApi基础系列(一)
前言 最近发表的EF Core貌似有点多,可别误以为我只专攻EF Core哦,私下有时间也是一直在看ASP.NET Core的内容,所以后续会穿插讲EF Core和ASP.NET Core,别认为你会 ...
- ASP.NET下MVC设计模式的实现
[转载]MVC架构在Asp.net中的应用和实现 转载自:http://www.cnblogs.com/baiye7223725/archive/2007/06/07/775390.aspx 摘要:本 ...
随机推荐
- C# Windows Phone App 开发,修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。
原文:C# Windows Phone App 开发,修改[锁定画面],从[Assets].[UI].[网路图片],并解决失灵问题. 一般我们在开发Windows Phone App,有时会希望透过应 ...
- 【Linux&Unix--open/close/write/read系统调用】
个人学习整理.如有不足之处,请不吝不吝赐教. 转载请注明:@CSU-Max 系列博文: Linux&Unix学习第一弹 -- 文件描写叙述符与权限 Linux&Unix学习 ...
- 使用2DToolkit报错“ OverflowException: Value is too large”
今天使用2DToolkit做图集和动画时报错“ OverflowException: Value is too large”,大侠们说是字符串转整型时超过了Int的大小范围,所以报错.后来我一位同事高 ...
- ubuntu中KDE与GNOME安装切换
转载:http://apps.hi.baidu.com/share/detail/18919303 1.在Ubuntu中安装KDE桌面命令 sudo apt-get install kUbuntu-d ...
- Java常见问题3:周期之谜
谜24 byte是有符号的.范围是-128 - 127. 而0x90是int类型. 比較的时候.不相等. 假设想让其相等,须要进行类型转换:(byte & 0xff) 或者 (byte)0x9 ...
- DV工作流
- HDU 2815 Mod Tree 离散对数 扩张Baby Step Giant Step算法
联系:http://acm.hdu.edu.cn/showproblem.php?pid=2815 意甲冠军: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ ...
- hibernate的通配符比拼接sql到底好在哪?
Hibernate对于刚接触的人来说,通配符只是提供了另一种组合sql的方式.接触的久了,熟悉之后,才能够真正理解通配符在Hibernate中起到的作用 主要作用有两点: 1,避免sql注入 hibe ...
- Codeforces Helpful Maths
Xenia the beginner mathematician is a third year student at elementary school. She is now learning t ...
- [LeetCode55]Jump Game
题目: Given an array of non-negative integers, you are initially positioned at the first index of the ...