`
java虫
  • 浏览: 536057 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习Cookie

阅读更多
看到好多网站提供记住用户名或密码的功能,上网搜了些关于cookie的文章学习整理一下.
一.什么是Cookies?

你会问,什么是cookies呢? cookie 是浏览器保存在用户计算机上的少量数据。它与特定的WEB页或WEB站点关联起来,自动地在WEB浏览器和WEB服务器之间传递。

比如,如果你运行的是Windows操作系统,使用Internet Explorer上网,那么你会发现在你的“Windows”目录下面有一个子目录,叫做“Temporary Internet Files”。如果你有空看看这个目录,就会发现里面有一些文件,文件名称看起来就象电子邮件地址。比如在我机器上的这个目录里,就有 “XX@support.microsoft.com”这样的文件。这是一个cookie 文件,这个文件从哪来呢?猜一猜,它来自微软的支持站点。
对于管理细小的、不重要的、不想保存在中央数据库里的细节信息,Cookies 是个很不错的方案。(这不是说大家的名字不重要。)比如,目前网站上不断增长的自定义服务,可以为每个用户定制他们要看的内容。如果你设计的就是这样一个站点,那么你怎么来管理这样的信息:一个用户喜欢绿色的菜单条,而另一个喜欢红色的。确实是个累人的问题。不过,这样的信息,可以很安全地记录到cookie,并保存在用户的计算机上,而你自己的数据库空间可以留给更长久更有意义的数据。

总结 Cookies 对于安全用途,通常很有用。我不想在此就这一问题过于深入,只是提供一个示例,可以看到如何使用在一段时间之后过期的cookies来保证站点安全:

1. 使用用户名和口令,通过 SSL 登录。
2. 在服务器的数据库里检查用户名和口令。如果登录成功,建立一个当前时间标签的消息摘要 (比如 MD5) ,并把它保存在cookie和服务器数据库里。把用户的登录时间保存在服务器数据库里面的用户记录里。
3. 在进行每个安全事务时(用户处于登录状态的任何事务),把cookie的消息摘要和保存在服务器数据库里的摘要进行比较,如果比较失败,就把用户引导到登录界面。
4. 如果第3步检查通过,那么检查当前时间和登录时间之音经过的时间是否超过允许的时间长度。如果用户已经超时,那么就把用户引到登录界面。
5. 如果第3步和第4步都通过了,那么把登录时间重新设置成当前时间,允许事务发生。那些需要你登录的安全站点,可能多数使用的都是和这里介绍的类似的方法。


二.Cookie的构成


     Cookies最初设计时,是为了CGI编程。但是,我们也可以使用Javascript脚本来操纵cookies。

     在Javascript脚本里,一个cookie 实际就是一个字符串属性。当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值。每个cookie除了name名称和value值这两个属性以外,还有四个属性。这些属性是: expires过期时间、 path路径、 domain域、以及 secure安全。

1.Expires–过期时间

   指定cookie的生命期。具体是值是过期日期。如果想让cookie的存在期限超过当前浏览器会话时间,就必须使用这个属性。当过了到期日期时,浏览器就可以删除cookie文件,没有任何影响。

2.Path–路径

      指定与cookie关联的WEB页。值可以是一个目录,或者是一个路径。如果http://www.zdnet.com/devhead/index.html 建立了一个cookie,那么在http://www.zdnet.com/devhead/目录里的所有页面,以及该目录下面任何子目录里的页面都可以访问这个cookie。这就是说,在http://www.zdnet.com/devhead/stories/articles 里的任何页面都可以访问http://www.zdnet.com/devhead/index.html建立的cookie。但是,如果http://www.zdnet.com/zdnn/ 需要访问http://www.zdnet.com/devhead/index.html设置的cookes,该怎么办?这时,我们要把cookies 的path属性设置成“/”。在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB页面都可以共享cookies。现在看另一个例子:如果想让 http://www.zdnet.com/devhead/filters/ 和http://www.zdnet.com/devhead/stories/共享cookies,就要把path设成“/devhead”。

3.Domain–域

       指定关联的WEB服务器或域。值是域名,比如zdnet.com。这是对path路径属性的一个延伸。如果我们想让 catalog.mycompany.com 能够访问shoppingcart.mycompany.com设置的cookies,该怎么办? 我们可以把domain属性设置成“mycompany.com”,并把path属性设置成“/”。FYI:不能把cookies域属性设置成与设置它的服务器的所在域不同的值。

4.Secure–安全

     指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。

三.操作Cookies

     请记住,cookie就是文档的一个字符串属性。要保存cookie,只要建立一个字符串,格式是name=(名称=值),然后把文档的 document.cookie 设置成与它相等即可。比如,假设想保存表单接收到的用户名,那么代码看起来就象这样:

document.cookie = "username=" + escape(form.username.value);


在这里,使用 escape() 编码函数非常重要,因为cookie值里可能包含分号、逗号或者空格。这就是说,在读取cookie值时,必须使用对应的unescape()函数给值解码。

1.cookie的四个属性

name=[; expires=][; domain=][; path=][; secure]

名称=<值>[; expires=<日期>][; domain=<域>][; path=<路径>][; 安全],  和 应当用对应的值替换。

2.应当使用GMT格式
可以使用Javascript脚本语言的日期类Date的.toGMTString() 方法得到这一GMT格式的日期值。

3.方括号代表这项是可选的
  比如在 [; secure]两边的方括号代表要想把cookie设置成安全的,就需要把"; secure" 加到cookie字符串值的后面。如果"; secure" 没有加到cookie字符串后面,那么这个cookie就是不安全的。

4.不要把尖括号<> 和方括号[] 加到cookie里
(除非它们是某些值的内容)设置属性时,不限属性,可以用任何顺序设置。

  下面是一个例子,在这个例子里,cookie "username" 被设置成在15分钟之后过期,可以被服务器上的所有目录访问,可以被"mydomain.com"域里的所有服务器访问,安全状态为安全。
// Date() 的构造器设置以毫秒为单位
// .getTime() 方法返回时间,单位为毫秒
// 所以要设置15分钟到期,要用60000毫秒乘15分钟
var expiration = new Date((new Date()).getTime() + 15 * 60000);
document.cookie = "username=" + escape(form.username.value)+ "; expires ="
+ expiration.toGMTString() + "; path=" + "/" + "; _
domain=" + "mydomain.com" + "; secure";


读取cookies值有点象个小把戏,因为你一次就得到了属于当前文档的所有cookies。

// 下面这个语句读取了属于当前文档的所有cookies
var allcookies = document.cookie;


现在,我们得解析allcookies变量里的不同cookies,找到感兴趣的指定cookie。这个工作很简单,因为我们可以利用Javascript语言提供的扩展字符串支持。

如果我们对前面分配的cookie "username" 感兴趣,可以用下面的脚本来读取它的值。
// 我们定义一个函数,用来读取特定的cookie值。
function getCookie(cookie_name)
{
var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(cookie_name);

// 如果找到了索引,就代表cookie存在,
// 反之,就说明不存在。
if (cookie_pos != -1)
{
// 把cookie_pos放在值的开始,只要给值加1即可。
cookie_pos += cookie_name.length + 1;
var cookie_end = allcookies.indexOf(";", cookie_pos);
if (cookie_end == -1)
{
cookie_end = allcookies.length;
}

var value = unescape(allcookies.substring(cookie_pos, cookie_end));
}
return value;
}


// 调用函数
var cookie_val = getCookie("username");


  上面例程里的 cookie_val 变量可以用来生成动态内容,或者发送给服务器端CGI脚本进行处理。现在你知道了使用Javascript脚本操纵cookies的基本方法。但是,如果你跟我一样,那么我们要做的第一件事,就是建立一些接口函数,把cookies处理上的麻烦隐藏起来。不过,在你开始编程之前,稍候片刻。这些工作,早就有人替你做好了。你要做的,只是到哪去找这些接口函数而已。

   比如,在David Flangan的Javascript: The Definitive Guide 3rd Ed.这本书里,可以找到很好的cookie应用类。你也可以在Oreilly的WEB站点上找到这本书里的例子。本文最后的链接列表里,有一些访问这些cookie示例的直接链接。

四.Cookies 的隐患

1.Cookies 安全性
   因为某些原因Cookies 的名声很不好。许多人利用cookies做一些卑鄙的事情,比如流量分析、点击跟踪。Cookies 也不是非常安全,特别是没有secure属性的cookies。不过,即使你用了安全的cookies,如果你和别人共用计算机,比如在网吧,那么别人就可以窥探计算机硬盘上未加密保存的cookie文件,也就有可能窃取你的敏感信息。所以,如果你是一个WEB开发人员,那么你要认真考虑这些问题。不要滥用cookies。不要把用户可能认为是敏感的数据保存在cookies里。如果把用户的社会保险号、信用卡号等保存在cookie里,等于把这些敏感信息放在窗户纸下,无异于把用户投到极大危险之中。一个好的原则是,如果你不想陌生人了解你的这些信息,那就不要把它们保存在cookies里。

2.cookies还有一些实际的限制
  Cookies保留在计算机上,不跟着用户走。如果用户想换计算机,那么新计算机无法得到原来的cookie。甚至用户在同一台计算机上使用不同浏览器,也得不到原来的cookie:Netscape 不能读取Internet Explorer 的cookies。

  3.用户不愿意接受cookies
  所以不要以为所有的浏览器都能接受你发出的cookies。如果浏览器不接受cookies,你要保证自己的WEB站点不致因此而崩溃或中断。

4.WEB 浏览器能保留的cookies不一定能超过300个
  也没有标准规定浏览器什么时候、怎么样作废cookies。所以达到限制时,浏览器能够有效地随机删除cookies。浏览器保留的来自一个WEB服务器上的cookies,不超过20个,每个cookie的数据(包括名称和值),不超过4K字节.

  [b]总之,注意保持cookie简单。不要依赖cookies的存在,不要在每个cookie里保存太多信息。不要保存太多的cookes。但是,抛除这些限制,在技巧高超的WEB管理员手里,cookie的概念是一个有用的工具。
分享到:
评论

相关推荐

    学习cookie的笔记和总结

    ### 学习cookie的笔记和总结 #### 一、什么是Cookie? Cookie是一种小型的数据文件,由服务器发送到用户的浏览器,并存储在用户计算机上的一种机制。它主要用于保存用户的偏好设置、登录状态等信息,以便用户再次...

    桂林老兵cookie欺骗工具

    桂林老兵Cookie欺骗工具是一款在IT安全领域中被广泛讨论...总的来说,桂林老兵Cookie欺骗工具为网络安全专业人员提供了一个实验和学习Cookie欺骗技术的平台,但使用时应谨慎,合理运用这些知识来提升网络环境的安全性。

    cookie插件v0.2.1

    2. **Cookie管理**:学习Cookie的生命周期、作用域、如何设置和读取Cookie,以及它们在用户隐私和网站跟踪中的角色。 3. **Chrome扩展机制**:深入理解Chrome的扩展机制,如事件监听、背景脚本、内容脚本以及它们...

    课程Cookie(自学)

    【课程Cookie(自学)】是一门...通过这个自学课程,你可以系统地学习Cookie技术,结合提供的资源进行实践,逐步提升你的Web开发技能。在学习过程中,如果有任何疑问,可以通过提供的联系方式寻求帮助。祝你学习顺利!

    cookie学习练习记录

    本文将深入探讨“Cookie学习练习记录”这一主题,基于提供的描述和标签,我们将围绕Cookie的使用展开讨论。 首先,让我们理解Cookie的基本原理。Cookie是由服务器发送到用户的浏览器并存储在本地的一小段文本数据。...

    Cookie的学习

    这个“Cookie的学习”主题将深入探讨Cookie的基本概念、工作原理、用途以及如何管理和使用它。 首先,Cookie是由Web服务器发送到用户的浏览器并存储在本地的一小段文本信息。当用户再次访问同一网站时,浏览器会将...

    j2ee实验二:学习使用Session和Cookie

    ### j2ee实验二:学习使用Session和Cookie #### 实验背景与目标 在现代Web应用开发中,理解和掌握会话管理和用户认证是至关重要的。本实验旨在通过一系列实际操作来帮助学生熟悉J2EE环境下Session和Cookie的工作...

    cookie和session的学习文档

    cookie和session的学习文档

    PHP 利用COOKIE验证用户登录的例子

    PHP 利用COOKIE验证用户登录的例子,用户名和密码存于数据库中,其中的数据库操作不是该例子的重点,本例子适合PHP新手学习COOKIE的工作原理和如何使用COOKIE。

    易语言取设cookie

    通过阅读和学习这个源码,你可以更深入地理解如何在易语言环境中处理网络请求和响应,以及如何利用Cookie来维护用户状态。 总结来说,易语言的“取设cookie”功能是网络编程中的核心部分,对于开发基于HTTP协议的...

    jquery 设置cookie、删除cookie、获取cookie

    通过本文的学习,您应该已经掌握了如何使用 jQuery 和其插件来设置、获取和删除 Cookie 的基本方法。在实际开发过程中,灵活运用这些技巧可以帮助您更好地管理和维护用户的状态信息。希望这些知识能够对您的工作有所...

    Cookie 学习案例之三天免登录

    本文将深入探讨“Cookie学习案例之三天免登录”的主题,同时解决描述中提到的“session登录练习使用解决null显示问题”。 Cookie是客户端存储数据的一种方式,由服务器发送到用户的浏览器,并由浏览器保存。在用户...

    java jsp Cookie学习资料

    ### Java JSP Cookie 学习资料详解 #### 一、Cookie 概述 Cookie 是一种在客户端(通常是用户的浏览器)存储信息的技术。当用户访问一个网站时,服务器可以通过 HTTP 响应头 `Set-Cookie` 向客户端发送 Cookie。...

    Cookie学习 教程

    在IT行业中,尤其是在Web开发领域,Cookie是一种至关重要的技术,用于在客户端和服务器之间存储和传递数据。本教程将深入探讨Cookie的基本概念、工作原理、使用场景以及如何在实际项目中进行操作。 Cookie是由...

    前端Cookie工具,获取Cookie数据,获取Cookie数据key名称,清除站点所有Cookie数据

    `CookieClearAll.html`文件可能就是一个包含以上功能的示例页面,供开发者学习和参考。 总的来说,理解并掌握Cookie的使用是前端开发中不可或缺的一部分,它帮助我们在无状态的HTTP协议中实现状态保持,提供了一种...

    jquery cookie 实例下载

    在JavaScript的世界里,jQuery库因其简洁的API和强大的功能而广受欢迎。Cookie是Web开发中的一...通过学习并应用这些知识点,你可以提升Web应用程序的用户体验,例如实现用户首选项的持久化存储或进行简单的状态管理。

    cookie实例

    在IT行业中,Cookie是Web开发中的一个重要概念,用于在客户端和服务器之间传递状态信息。Cookie主要用来存储用户数据,如登录状态、...通过实践和学习"cookie实例",开发者可以更好地掌握Cookie的使用,提高用户体验。

    cookie的学习1

    在网页开发中,Cookie是一种非常重要的技术,用于在客户端存储数据。本文将深入探讨Cookie的基本概念、使用方式以及如何在JavaScript中操作Cookie。 首先,理解什么是Cookie至关重要。Cookie是由服务器发送到用户...

    cookie机制实现登陆、退出

    在Web开发中,Cookie是一种非常重要的技术,它用于在客户端和服务器之间传递状态信息。Cookie机制主要用于实现用户登录...在`cookie_demo`这样的项目中,开发者可以学习和实践这些概念,以加深对Cookie工作原理的理解。

Global site tag (gtag.js) - Google Analytics