细说Cookies

什么是Cookies?

Cookies是一些小文件,它们被创建在客户端的系统里,或者被创建在客户端浏览器的内存中(如果是临时性的话)。用它可以实现状态管理的功能。我们可以存储一些少量信息到可以短的系统上,以便在需要的时候使用。最有趣的事情是,它是对用户透明的。在你的web应用程序中,你可以到处使用它,它极其得简单。Cookies是以文本形式存储的。如果一个web应用程序使用cookies,那么服务器负责发送cookies,客户端浏览器将存储它。浏览器在下次请求页面的时候,会返回cookies给服务器。最常用的例子是,使用一个cookie来存储用户信息,用户的喜好,“记住密码”操作等。Cookies有许多优点,当然也有许多缺点。我将在接下来讲述。

Cookies是如何创建的?

当一个客户端向服务器发出请求,服务器发送cookies给客户端。而相同的cookies可以被后续的请求使用。例如,如果codeproject.com将Session
ID作为cookies存储。当一个客户端首次向web服务器请求页面,服务器生成Session ID,并将其作为cookies发送往客户端。

现在,所有来自相同客户端的后续请求,它将使用来自cookies的Session ID,就像下面这幅图片展示的那样。

浏览器和web服务器以交换cookies信息来作为响应。对不同的站点,浏览器会维护不同的cookies。如果一个页面需要cookies中的信息,当某个URL被“点击”,首先浏览器将搜索本地系统的cookies的信息,然后才转向服务器来获得信息。

Cookies的优势

下面是使用cookies的主要优势:

(1) 实现和使用都是非常简单的

(2) 由浏览器来负责维护发送过来的数据(cookies内容)

(3) 对来自多个站点的cookies来讲,浏览器自动管理它们

Cookies的劣势

下面是cookies的主要劣势:

(1) 它以简单的文本格式来存储数据,所以它一点也不安全

(2) 对于cookies数据,有大小限制(4kB)

(3) Cookies最大数目也有限制。主流浏览器提供将cookies的个数限制在20条。如果新cookies到来,那么老的将被删除。有些浏览器能支持到300条的cookies数。

(4) 我们需要配置浏览器,cookies将不能工作在浏览器配置的高安全级别环境下。

如何创建Cookies

为了使用cookies,我们首先需要引入System.Web这个命名空间:

using System.Web;

看下面的代码,来看看我们如何创建cookies以及如何将它加入到web响应中去:

Cookies被创建后将持续到浏览器关闭。我们可以使其持续更长的时间。该如何实现呢?我接下来将来讲解它

如何从Cookies中读取信息

在读取cookies之前,首先我们需要检查是否能找到该cookie。在读取cookies之前,先检查它总是一个很好的习惯,因为浏览器可能禁用cookies。

什么是持久化的和非持久化的Cookies

我们可以将cookies分成两类:

(1) 持久化的cookies

(2) 非持久化的cookies

持久化的cookies:这可以被称为永久性的cookies,它被存储在客户端的硬盘内,直到它们失效。持久化的cookies应该被设置一个失效时间。有时,它们会一直存在直到用户删除它们。持久化的cookies通常被用来为某个系统收集一个用户的标识信息。

非持久化cookies:也可以被称之为临时性的cookies。如果没有定义失效时间,那么cookie将会被存储在浏览器的内存中。我上面展示的例子就是一个非持久的cookies。

修改一个持久化的cookies与一个非持久化的cookies并没有什么不同。它们唯一的区别是——持久化的cookies有一个失效时间的设置。

怎样创建持久化的cookies

我已经给出了创建一个非持久化cookies的例子。对于持久化的cookies而言,我们需要为其定义一个过期时间。下面的代码中,我定义了一个持久化的cookies,因为我将其失效时间标识为5天。

//Creting a Cookie Object
HttpCookie _userInfoCookies = new HttpCookie("UserInfo");

//Setting values inside it
_userInfoCookies["UserName"] = "Abhijit";
_userInfoCookies["UserColor"] = "Red";
_userInfoCookies["Expire"] = "5 Days";

//Adding Expire Time of cookies
 _userInfoCookies.Expires = DateTime.Now.AddDays(5);

//Adding cookies to current web response
Response.Cookies.Add(_userInfoCookies);

最有趣的事情是,它们到底存储在硬盘的什么地方呢?

Cookies到底存储在本地硬盘的什么地方

其中一个有趣的事情是知晓cookies在你硬盘的哪个地方。首先,进入浏览文件夹选项,选择“显示隐藏文件和文件夹”。

现在,导航到当前用户cookies的文件夹。看下面的这幅图:

怎样在它失效时间之前移除Cookies

这是一个有趣的任务。如果你想在失效时间之前移除持久化的cookies,唯一的方式就是用一个过去的时间作为失效时间来代替老的失效时间。

HttpCookie _userInfoCookies = new HttpCookie("UserInfo");
//Adding Expire Time of cookies before existing cookies time
_userInfoCookies.Expires = DateTime.Now.AddDays(-1);
//Adding cookies to current web response
Response.Cookies.Add(_userInfoCookies);

怎样控制Cookies域

我们可以以下面的方式来控制cookies的域:

(1) 限制cookies的路径

(2) 限制cookies的域

什么是Cookies Munging?

默认的,asp.net使用cookies来存储session
id,但就像我之前提到的,有些浏览器不支持cookies。为了克服这个问题,asp.net使用“Cookies
Munging”技术来管理session变量,而不使用cookies。

为什么我们在asp.net使用Cookies
Munging

这里有一些特殊原因导致了我们在asp.net中使用Cookies Munging:

(1) 一些浏览器不支持cookies

(2) 有时用户让浏览器禁用cookies

Cookies
Munging如何工作?

当用户向服务器请求一个页面,服务器编码“session id”然后将它们加入到页面的每一个HREF
的链接中。当用户点击一个链接,asp.net解码session
id并传递它给用户请求的页面。现在,正在被请求的页面就可以检索到任何的session变量。这一切都将平滑地发生——当asp.net检测到用户浏览器不支持cookies时。

怎样实现Cookies Munging

为了实现它,我们不得不让session状态变成非cookies形式:

<sessionState cookieless= "true />

怎样在浏览器中配置cookies

我们现在来看看如何在浏览器中配置——启用或禁用cookies。我已经在之前讨论过IE浏览器的设置了。点击工具—>Internet
Options—>转到隐私选项卡。在这里,你将能够看到一个像下面这样的滚动条:



第一个选项将允许所有的cookies,而最后一个选项将阻止所有的cookies。你可以在滚动的时候获得更多的信息。

原文发布时间为:2011-12-11

本文作者:vinoYang

本文来自合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

时间: 2024-08-03 09:19:03

细说Cookies的相关文章

辞旧迎新——年度web开发合辑,新年大放送

本文整理了,工作半年来实践.研究.翻译过的相关web有关的知识,在2012来临之际,与大家分享.祝愿所有的网友和程序员朋友们身体健康,阖家欢乐! [基本篇] 细说Cache 所有Cache类型的完整介绍,偏重于服务端缓存的讲解与演示 细说Cookies Cookies的完整介绍,包括实现原理,利弊,偏重服务端使用演示 [前端篇] JS闭包可被利用的常见场景 展示了JS闭包的几个常见场景,给你带来更简洁更优化的编码方式! 仿新浪微博登录的邮箱地址自动补全功能 如题,这是一个JQuery的小Demo

细说VB.NET(上)

细说VB.NET(上)(作者:青苹果工作室编译 2001年03月07日 14:47) 微软公司提出的.NET概念,正从各个方面渗入到我们的生活中.它将产生的作用,诚如一位业内名家所描述的:"请忘掉你认为你所知道的,.NET将改变一切"!既然如此,无论是IT业内人士.还是企业决策者,快速领会这个新概念的含义及深远影响,都显得非常必要. 概要 VB正在不断地发展中,它具备了以前VB编程人员作梦都想拥有的性能,想象一下你将随心所欲的利用这些性能,是不是很令人激动?然而,这个计划于2001年第

细说VB.NET(中)

细说VB.NET(中)(作者:青苹果工作室编译 2001年03月07日 14:47) 易于反编译的中间语言 无论你用VB.C#或其它.NET语言编写应用程序,VS.NET代码都编译成为中间语言(IL).当应用程序运行时,一个即时编译器(JITter)处理IL代码并把它编译成为机器语言.这意味着在理论上可能为Windows以外的平台创建.NET运行库,但现在关于类似的事情还没有任何官方消息.中间语言的一个缺陷是:它像VB5以前的VB版本一样,容易被反编译.这种可能性使许多开发者普遍地质疑.NET架

ASP.NET中利用cookies保持客户端信息

asp.net|cookie|cookies|客户端 我当前所吃的东东都固定为食物,所以一点也不惊讶,这一周的主题为cookies. Cookies用于存储特定用户信息,它提供了Web程序中一种有用的方式.多年以来,JavaScript开发人员已经进行了有关cookie的大量工作.同样,ASP.NET通过System.Web空间名称也提供了cookie的访问.虽然你不应该使用cookie来存储一些敏感性的数据,但是,它们是处理锁细数据的一个极好的选择,比如颜色参数选择或者最后一次访问日期. 传递

php设置session值和cookies的学习示例

 一直没弄懂Session,cookies什么的登陆验证到底是怎么回事,昨天分别用HttpURLConnection和HttpClient两个类来实验了一下,基本弄明白了Session验证登陆的机制和这两个类的区别.现在分享给大家 第一步:先在本地写一个登陆页面和一个内容页面(登陆了才能进去)吧.代码大致如下:   下面是login.php,用于请求登陆的,通过post传递参数,如果登陆成功就会注册session.  代码如下: <?php session_start();   if (isse

ASP如何利用XMLHTTP实现表单的提交以及cookies或session的发送和Referer

cookie|cookies|session|xml 利用XMLHTTP来制作小偷的具体细节落伍很多人都发过和讨论过了,但是在制作ASP小偷的过程中,很多人就发现ASP小偷不如PHP小偷的那么强 大了.确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外两 个方法被我们忽略了,而这正是问题的关键.下面首先来说说这个方法1..send()由于流行的小偷是使用的GET而不是POST来传送数据,所以很多人忽略了这个

ASP小偷程序如何利用XMLHTTP实现表单的提交以及cookies或session的发送

cookie|cookies|session|xml|程序|小偷程序 利用XMLHTTP来制作小偷的具体细节落伍很多人都发过和讨论过了,但是在制作ASP小偷的过程中,很多人就发现ASP小偷不如PHP小偷的那么强 大了.确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外两 个方法被我们忽略了,而这正是问题的关键.下面首先来说说这个方法1..send()由于流行的小偷是使用的GET而不是POST来传送数据,所以

asp设置cookies过期时间的方法

但最好不要随便写 Response.Cookies("CookieName").Expires=Date,这样页面之间的调用时值会为空. Response.Cookies("user_name").Expires=Date+1 '指定cookie保存时间  保留COOKIES一个小时  Response.Cookies("MyCookie").Expires= (now()+1/24)  Response.Cookies("MyCook

PHP 如何获取Cookies

PHP Cookies   cookie 常用于识别用户.cookie 是一种服务器留在用户计算机上的小文件.每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie.通过 PHP,您能够创建并取回 cookie 的值. 如何创建 Cookie? setcookie() 函数用于设置 cookie. 注释:setcookie() 函数必须位于 <html> 标签之前. 语法: setcookie(name, value, expire, path, domain); 在下面的例子