APS.NET Cookie
Cookie 提供了一种在 Web 应用程序中存储用户特定信息(如历史记录或用户首选项)的方法。
Cookie 是一小段文本。伴随着请求和响应在 Web server和client之间来回传输。Cookie 包括每次用户訪问网站时可由 Web 应用程序读取的信息。
1. 写Cookie
浏览器管理client计算机上的 Cookie。使用 HttpResponse 对象可向client发送 Cookie,该对象会公开称为 Cookies 的属性。
不论什么须要 Web 应用程序发送到浏览器的 Cookie 都必须加入到此集合中。编写新 Cookie 时。必须指定 Name 和 Value。
每一个 Cookie 必须有一个唯一的名称,这样在以后当浏览器随同请求发送 Cookie 时,Web 应用程序就能够标识该 Cookie。
默认情况下,Cookie 由位于同一域中的全部页面共享,但能够通过设置 Cookie 的 Path 属性将 Cookie 限制在站点中的特定子目录。若要同意应用程序的全部目录中的全部页面都检索一个 Cookie。请从应用程序根目录中的页面设置该 Cookie,但不要设置 Path 属性。
假设不指定该 Cookie 的过期限制,则该 Cookie 将不会保留在client计算机上,当用户会话到期时该 Cookie 即到期。
Cookie 仅能存储 String 类型的值。
在将不论什么非字符串值存储到 Cookie 中之前,必须将它们转换为字符串
HttpCookie myCookie = new HttpCookie("Cooker"); myCookie["name"] = "zzh"; myCookie["today"] = "friday"; myCookie.Expires = DateTime.Now.AddDays(1); //myCookie.Expires.AddDays(1); Response.Cookies.Add(myCookie); //Response.AppendCookie(myCookie); myCookie.Domain = "abc.com"; //指定作用域abc.com和子域名如a.abc.com可用 myCookie.Path = "/admin"; //仅仅能用于 admin 文件夹或虚拟根文件夹中的页面
2. 读Cookie
出于安全原因,您仅仅能读取属于同一域的页所设置的 Cookie。假设已设置 Cookie 的 Path 属性,则仅仅有该域路径中的页和子目录可以使用该 Cookie。
在读取特定 Cookie 值时,请測试该 Cookie 是否存在以及它是否具有值,否则将发生异常。
Cookie 中的全部值都作为 String 类型存储。因此若要将 Cookie 值作为其它数据类型使用,必须对值进行对应地转换。
if (Request.Cookies["Cooker"] != null) { string Cooker; if (Request.Cookies["Cooker"]["name"] != null) { Cooker = Request.Cookies["Cooker"]["name"]; } }
3. 删Cookie
不能直接删除用户计算机中的 Cookie。可是,能够通过将 Cookie 的到期日期设置为过去的日期,让用户的浏览器来删除 Cookie。当用户下一次向设置该 Cookie 的域或路径内的页发出请求时,浏览器将确定该 Cookie 已到期并将其移除。
调用 Cookies 集合的 Remove 方法可从server端的集合中移除 Cookie,使 Cookie 不会被发送至client。
可是,假设client已存在 Cookie,则该方法无法从client将其移除。
if (Request.Cookies["Cooker"] != null) { HttpCookie myCookie = new HttpCookie("Cooker"); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); }循环删
HttpCookie aCookie; string cookieName; int limit = Request.Cookies.Count; for (int i=0; i<limit; i++) { cookieName = Request.Cookies[i].Name; aCookie = new HttpCookie(cookieName); aCookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(aCookie); }
不能直接改动 Cookie。
更改 Cookie 的过程涉及创建一个具有新值的新 Cookie,然后将其发送到浏览器来覆盖client上的旧版本号 Cookie。以下的代码演示样例演示怎样更改存储用户对网站的訪问次数的 Cookie 的值
int counter; if (Request.Cookies["counter"] == null) counter = 0; else { counter = int.Parse(Request.Cookies["counter"].Value); } counter++; Response.Cookies["counter"].Value = counter.ToString(); Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1);
5. Cookie安全
不要将不论什么关键信息存储在 Cookie 中。比如,不要将用户的password存储在 Cookie 中。即使是临时存储也不要这样做。
通常。不要将不论什么信息保存在 Cookie 中,由于一旦它被假冒,就会危及您的应用程序的安全。
而是在 Cookie 中保存对信息在server上的位置的引用。
将 Cookie 的过期日期设置为可接受的最短实际时间。尽可能避免使用永久 Cookie。
考虑对 Cookie 中的信息加密。
考虑将 Cookie 的 Secure 和 HttpOnly 属性设置为 true。
Cookie.Secure=true 使 Cookie 仅仅能在使用安全套接字层 (SSL) 的连接上传输。SSL 并不能防止保存在用户计算机上的 Cookie 被读取或操作,但可防止 Cookie 在传输过程中被读取。由于 Cookie 已被加密。
相关文章
- 用.NET开发的磁力搜索引擎——btbook.net「建议收藏」
- [.NET控件]Telerik RadControls for ASP.NET AJAX 2008 Q1 net 2.0 Web.UI「建议收藏」
- .Net CLR GC plan_phase二叉树和Brick_table
- .NET 纯原生实现 Cron 定时任务执行,未依赖第三方组件
- .net 温故知新:【8】.NET 中的配置从xml转向json
- .NET定义身份资源与API资源
- .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
- 开发积极探索Mysql.Net 开发之路(mysql.net)
- Oracle Database: The Ultimate Connection Guide for .NET Developers(net连接oracle)
- .net利用MSSQL连接ASP.NET的办法探索(mssql 连接asp)
- 基于NET技术的Oracle信息服务(.net用oracle)
- Net调用MySQL技术实践(.net 调用mysql)
- Net框架如何使用MySQL数据库(.net能用mysql吗)
- Net环境下MySQL数据库驱动的研究与应用(.net的mysql驱动)
- Net平台下MySQL数据库操作实践(.net mysql操作)
- Redis集群实现高性能NET应用(redis集群 .net)
- 探索Oracle中NET位置的背后秘密(oracle中net位置)
- ASP.NET内置对象之Application对象
- asp.net读取xml文件里面的内容,绑定到dropdownlist中
- ASP.NET前台javascript与后台代码调用
- asp.net在线编辑word文档可保存到服务器
- asp.net(C#)跨域及跨域写Cookie问题
- asp.net中利用正则表达式判断一个字符串是否为数字的代码
- 答你所问.NET小常识方便学习asp.net的朋友
- asp.net中的cookie使用介绍
- asp.net关于Cookie跨域(域名)的问题
- asp.net无法加载oci.dll等错误的解决方法
- .NET操作Excel实例分享
- asp.net获取网站目录物理路径示例
- .NET中的枚举用法浅析