`
天梯梦
  • 浏览: 13724969 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论
阅读更多

 

 

1、HTTP协议本身是无状态的。

    由于cookie和session关系密切,这里我们一并介绍。

   打个比方:在河南时,我常到一家熟食店买馋嘴鸭,该店老板为了促进销售,特发布“每购满10只即可免费赠送一只”的优惠措施。除了家里有什么红白喜事要飨客之外,应该不会有人一次性购买10只烤鸭吧?所以老板得想个法子来记录顾客的消费数量,这里总共有三种方案:

   Ⅰ、老板记住每一个顾客的消费数量,等到顾客消费满10只的时候自动奉送一只。这好比HTTP协议本身是有状态的,可以记住顾客的活动行为。但遗憾的是,出于种种考虑http协议本身是不能有状态的,老板自个也没有这么超常的记忆力,故这种方案行不通!

    Ⅲ、老板发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次买烤鸭时,如果顾客出示该卡片,则老板搬出店里的划名册,找到你的卡号并加1个积分。这种做法就是在服务器端保持状态。

好比是session技术。

     cookie和session最大的区别在于: cookie是把积分卡发给顾客,上面记录了顾客所有的消费信息。Session则是把只有卡号(session id)的积分卡发给顾客,自家记录了顾客所有的消费信息。Cookie是保存在客户端的;session是保存在服务器端,而session id则是保存在客户端,通常也是一个cookie小文件,由于这个小文件除了session id(好比卡号)外什么也没有,因此比cookie安全多了。

 

 

2、cookie和session有什么用?

   常见的用法,比如在有些网站下载东西需要会员先登陆。http协议本身是无状态的,无法得知顾客是否已经登陆,怎么办呢?cookie和session就可以知道。再比如网上购物,购物车怎么知道顾客挑选过哪些商品呢?cookie和session也可以记录。总而言之,cookie和session就是能够记录顾客状态的技术,尽管二者属于不同的技术,但只要cookie能做到的,session也能做到!

 

 

COOKIE攻略

 

 

1、什么是cookie?

0Cookie技术是一个非常有争议的技术,自经诞生它就成了广大网络用户和Web开发人员的一个争论焦点。有一些网络用户,甚至包括一些资深的Web专家也对它的产生和推广感到不满,这倒不是因为Cookie技术的功能太弱或别的技术性能上的原因,而仅仅是因为他们觉得Cookie的使用,对网络用户的隐私构成了危害。因为Cookie是由Web服务器保存在用户浏览器上的小文本文件,它包含有关用户的信息(如身份识别号码、密码、用户在Web站点上购物的方式或用户访问该站点的次数)。

    那么Cookie技术究竟怎样呢?是否真的给网络用户带来了个人隐私的危害呢?还是让我们看了下面的内容,再做回答吧。

      在WEB技术发展史上,Cookie技术的出现是一个重大的变革。最先是Netscape在它的Netscape Navigator 浏览器中引入了Cookie技术,从那时起,World Wide Web 协会就开始支持Cookie标准。以后又经过微软的大力推广(因为微软的IIS Web服务器所采用的ASP技术很大程度的使用了Cookie技术),即在微软的Internet Explorer浏览器中完全支持Cookie技术。到现在,绝大多数的浏览器都支持Cookie技术,或者至少兼容Cookie技术的使用。

      按照Netscape官方文档中的定义,Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie是由Web服务器保存在用户浏览器上的小文件,它可以包含有关用户的信息(如身份识别号码、密码、用户在Web站点购物的方式或用户访问该站点的次数)。无论何时用户链接到服务器,Web站点都可以访问Cookie信息。

   如果你使用的是windows系统,那么请打开C:Documents and Settings用户名Cookies,你会发现该目录下有好多*.txt格式的小文件。那就是cookie文件。当然,在该目录下你也可能什么都发现不了,那时因为你新装了系统或者从未浏览过因特网,也或者你的浏览器禁用了cookie。否则该目录下总会有点东西的。

     通俗地讲,浏览器用一个或多个限定的文件来支持Cookie。这些文件在使用Windows操作系统的机器上叫做Cookie文件,在Macintosh机器上叫做magic Cookie 文件,这些文件被网站用来在上面存储Cookie数据。网站可以在这些Cookie文件中插入信息,这样对有些网络用户就有些副作用。有些用户认为这造成了对个人隐私的侵犯,更糟的是,有些人认为Cookie是对个人空间的侵占,而且会对用户的计算机带来安全性的危害。

     目前有些Cookie是临时的,另一些则是持续的。临时的Cookie只在浏览器上保存一段规定的时间,一旦超过规定的时间该Cookie就会被系统清除。例如在PHP中Cookie被用来跟踪用户进程直到用户离开网站。持续的Cookie则保存在用户的Cookie文件中,下一次用户返回时,仍然可以对它进行调用。

     在Cookie文件中保存Cookie,一些用户会过分地认为这将带来很大的问题。主要是有些用户担心Cookie会跟踪用户网上冲浪的习惯,譬如用户喜爱到那些类型的站点、爱从事些什么活动等。害怕这种个人信息一旦落入一些别有用心的家伙手中,那么个人也就可能成为一大堆广告垃圾的对象,甚至遭到意外的损害。不过,这种担心压根儿不会发生,因为网站以外的用户是无法跨过网站来获得Cookie信息的。所以想以这种目的来应用Cookie是不可能的。不过,由于一些用户错误的理解以及“以讹传讹”,一些浏览器开发商别无选择,只好作出相适的响应(例如Netscape Navigator4.0和Internet Explorer3.0都提供了屏蔽Cookie的选项)。个人认为,无风不起浪,如果网站程序员没有严谨思路的话,cookie确实也存在些许安全问题,不过这些瑕疵并不足以掩盖cookie的优秀品质,大多数人还是非常乐意使用它的。

        此外,很多最新的技术甚至已经可以在不能屏蔽Cookie的浏览器上进行Cookie的屏蔽了。例如,可以通过将Cookie文件设置成不同的类型来限制Cookie的使用。但是,非常不幸地是,要是你想完全屏蔽Cookie的话,肯定会因此拒绝许多的站点页面。因为当今已经有许多Web站点开发人员爱上了Cookie技术的强大功能,例如Session对象的使用就离不开Cookie的支持。

 

 

2、Cookie工作原理?

       尽管今天仍有一些网络用户对于Cookie的争论乐此不倦,但是对于绝大多数的网络用户来说还是倾向于接受Cookie的。因此,我们尽可以放心地使用Cookie技术来开发我们的WEB页面。

 

 

3、Cookie常见函数

● SetCookie 函数创建了一个Cookie,并且把它附加在HTTP头的后面。必须注意的一点是:Cookie是HTTP协议头的一部分,用于浏览器和服务器之间传递信息,所以必须在任何属于HTML文件本身的内容输出之前调用SetCookie函数,调用该函数前即使有空格、空白行都不行。如果setCookie()认了第二,就没有哪个元素敢认第一。使用setcookie()函数的前提是客户浏览器支持cookie,如果客户将之禁用的话,setcookie()也就英雄无用武之地了。

   int SetCookie(string name, string value, int expire, string path, string domain, int secure,bool httponly);  

参数说明:

   name;设置cookie变量的名称。

   value;设置cookie的值。

   expire;设置cookie过期时间。如果要把cookie保存为浏览器进程,即浏览器关闭后就失效。那么可以直接把expiretime设为0。Eg:setcookie(“name”,”value”,0)。该参数不设置的话,关闭浏览器也能结束一个cookie。

    path:表示web服务器上的目录,默认为被调用页面所在目录. 这里还有一点要说明的,比如你的站点有几个不同的目录(比如一个购物目录,一个论坛目录),那么如果只用不带路径的Cookie的话,在一个目录下的页面里设的Cookie在另一个目录的页面里是看不到的,也就是说,Cookie是面向路径的。实际上,即使没有指定路径,WEB服务器会自动传递当前的路径给浏览器的,指定路径会强制服务器使用设置的路径。解决这个问题的办法是在调用SetCookie时加上路径和域名,域名的格式可以是“http://www.phpuser.com/”,也可是“.phpuser.com”。 SetCookie函数里表示value的部分,在传递时会自动被encode,也就是说,如果value的值是“test value”在传递时就变成了“test%20value”,跟URL的方法一样。当然,对于程序来说这是透明的,因为在PHP接收Cookie的值时会自动将其decode。

 

 

    domain:cookie可以使用的域名,默认为被调用页面的域名。这个域名必须包含两个”.”,所以如果你指定你的顶级域名,你必须用”.mydomain.com” 。设定域名后,必须采用该域名访问网站cookie才有效。如果你使用多个域名访问该页,那么这个地方可以为空或者访问这个cookie的域名都是一个域下面的。

    secure:如果设为”1″,表示cookie只能被用户的浏览器认为是安全的服务器所记住。

    除了name之外所有的参数都是可选的。value,path,domain三个参数可以用空字符串”"代换,表示没有设置;expire 和 secure两个参数是数值型的,可以用0表示。expire参数是一个标准的Unix时间标记,可以用time()或mktime()函数取得,以秒为单位。secure参数表示这个Cookie是否通过加密的HTTPS协议在网络上传输。

    httponly:如果设为1,则表示cookie只能被http协议所使用,任何脚本语言,比如javascrīpt是不能获取PHP所创建的cookie的,这就有效削弱了来自XSS的攻击。(注意了:这是PHP5才有的选项,咱也没有用过。看了官方手册尝试着翻译的,如有疑问,请参考官方手册。)

   当前设置的Cookie不是立即生效的,而是要等到下一个页面或刷新后才能看到.这是由于在设置的这个页面里Cookie由服务器传递给客户浏览器,在下一个页面或刷新后浏览器才能把Cookie从客户的机器里取出传回服务器的原因。

 

 

小道消息

 

 

16岁德国学生通过cookie破解Hotmail

    德国16岁学生Adriaan Graas对于网络安全以及Web开发很有兴趣,他还发现了Hotmail破解之道。在一周多之后的今天,微软还未修复该漏洞。

    这名小黑客的想法很简单,当用户登陆Hotmail时,系统将会生成一个cookie方便下次登陆。由于该cookie并未绑定IP,因此黑客可以假冒这些cookie并用于登陆,甚至不需要知道受害人的密码甚至email地址。通过XSS黑客可以插入一段javascrīpt代码,利用log scrīpt将cookie发送到某个web服务器,脚本可以通过PHP,ASP,CGI等语言编写。

 

 

Cookie应用案例:

●创建一个cookie:

SetCookie()

●创建cookie数组:

其一:

SetCookie(“CookieArray[]“, “Value 1″);

SetCookie(“CookieArray[]“, “Value 2″);

其二:

SetCookie(“CookieArray[0]“, “Value 1″);

SetCookie(“CookieArray[1]“, “Value 2″);

● 接收和处理Cookie

 

 

PHP对Cookie的接收和处理的支持非常好,是完全自动的,跟GET,POST变量的原则一样,特别简单。

比如设置一个名为MyCookier的Cookie,PHP会自动从WEB服务器接收的HTTP头里把它分析出来,并形成一个可直接使用的全局变量,名为$_COOKIE[‘MyCookie’],这个变量的值就是Cookie的值。数组同样适用。

分别举例如下:(假设这些都在以前的页面里设置过了,并且仍然有效)

echo $_COOKIE[‘MyCookie’];

取出cookie数组的例子:

<?php

// 创建一个cookie数组

setcookie(“cookie[three]“, “cookiethree”);

setcookie(“cookie[two]“, “cookietwo”);

setcookie(“cookie[one]“, “cookieone”);

// 页面刷新之后,用foreach提取cookie数组。

if (isset($_COOKIE['cookie'])) {

foreach ($_COOKIE['cookie'] as $name => $value) {

   echo “$name : $value <br />n”;

}

}

?>

就这么简单。

● 删除Cookie

    要删除一个已经存在的Cookie,有两个办法:

1、调用只带有name参数的SetCookie,那么名为这个name的Cookie将被从关系户机上删掉;

setcookie(“MyCookie”); //删除MyCookie。

2、设置Cookie的失效时间为time()或time()-1//time()减多少没有关系啦,只要是过期时间就行//,那么这个Cookie在这个页面的浏览完之后就被删除了(其实是失效了)。例如:

    setcookie(“MyCookie”,”Value”,time()-1); //删除MyCookie。

要注意的是,当一个Cookie被删除时,它的值在当前页在仍然有效的。

    如果要把cookie保存为浏览器进程,即浏览器关闭后就失效。那么可以直接把expiretime设为0。例如:setcookie(“name”,”value”,0)。该参数不设置的话,关闭浏览器也能结束一个cookie。

 

 

Cookie注意事项

1、SetCookie()之前不能有任何html输出,它认了第二,没有哪个元素敢认第一,就是空格,空白行都不行。

2、SetCookie()后,你在当前页调用echo $_COOKIE["name"]不会有输出。必须刷新或到下一个页面才可以看到Cookie值。原因很简单。SetCookie()执行之后,往客户端发送一个cookie,你不刷新或浏览下一个页面,客户端怎么把cookie给你送回去呀?浏览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着这个Cookie;不过,对于其他网站的请求Cookie是绝对不会跟着发送的。而且浏览器会这样一直发送,直到Cookie过期为止。

3、使用Cookie的限制。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。 (这是书上看到的说法,应该是一个web站点能创建的Cookie不能超过30个吧,要不然,我机子里的cookie少说也上百了,请达人指教!)

4、Cookie是保存在客户端的,用户禁用了Cookie,你的Cookie自然也就没作用啦!现在的浏览器,每当咱发送一个Cookie给客户端,他就像看门狗一样给拦截住了,并询问用户是否允许Cookie进门。天,用户又不是专家,有几个人知道啥叫Cookie呀?搞不好都当病毒拒之门外了。

本文来源于WEB开发笔记 http://www.chhua.com , 原文地址: http://www.chhua.com/web-note128 


分享到:
评论

相关推荐

    PHP Cookie的配置与应用

    **PHP Cookie配置与应用详解** Cookie是Web应用程序中常用的一种数据存储机制,它允许服务器在用户的浏览器上设置少量数据,以便在后续的请求中识别用户。这篇文章将深入探讨PHP中Cookie的配置、设置、读取以及其在...

    PHP Cookie:Session详解.md

    ### PHP Cookie 与 Session 详解 #### 一、PHP Cookie **1. Cookie 的基本概念** - **名称和值**:每个 Cookie 都有一个名称和一个值,名称用于唯一标识该 Cookie,而值则用来存储信息。例如,可以通过设置一个...

    php cookie工作原理与实例详解

    **PHP Cookie工作原理** Cookie是由Web服务器存储在用户浏览器中的小型文本文件,用于在客户端和服务器之间传递信息。当用户访问一个网站时,服务器可以通过设置Cookie来存储特定的数据,如用户的登录状态、偏好...

    phpcookie:PHP cookie工具

    PHPCookie 免费PHP cookie工具,可用于功能强大的项目! 文献资料 PHPCookie是一个很小的软件包,用于处理Cookie并对其进行加密。 假设存在安全问题,它实施了一种简单的方法来访问和处理Cookie。 该软件包使用...

    php cookie 登录验证示例代码

    PHP Cookie 登录验证示例代码解析 PHP Cookie 登录验证是指通过在客户端设置 Cookie 来实现用户登录验证的机制。在这个示例代码中,我们可以看到如何使用 PHP 来实现 Cookie 登录验证。 Cookie 的概念 Cookie 是...

    PHP Cookie的使用教程详解

    本文将详细介绍PHP中Cookie的使用方法,包括设置、接收、处理和删除Cookie。 首先,PHP使用SetCookie函数来创建Cookie。开发者需要注意,由于Cookie属于HTTP协议的一部分,因此在任何HTML文档内容输出之前必须调用...

    php简单的cookie身份验证机制

    在PHP编程中,Cookie是一种常见的身份验证机制,用于在客户端(浏览器)和服务器之间存储和传递信息。这个“php简单的cookie身份验证机制”应该包含了实现这一功能的基本代码和逻辑。以下是对这一主题的详细说明: ...

    PHP COOKIE设置为浏览器进程

    在PHP中,Cookie是一种在客户端存储数据的方法,它允许服务器端的数据在用户浏览网页时保持持久性。在本文中,我们将深入探讨如何设置PHP Cookie使其与浏览器进程关联,并理解相关的工作原理。 首先,当我们设置一...

    PHP cookie实现保存浏览历史使用的sql文件

    PHP cookie实现保存浏览历史使用的sql文件

    php session登录验证实例与 cookie登录验证实例

    在PHP中,有两种常见的用户验证方法:session和cookie。这两种方法各有优缺点,选择哪种通常取决于应用场景和安全需求。下面我们将深入探讨PHP session登录验证和cookie登录验证的实例。 ### PHP Session 登录验证 ...

    用于处理cookie的php类.zip

    在PHP编程中,Cookie是一种非常常见的用户数据存储机制,它允许服务器在用户的浏览器上存储少量信息,以便在后续的请求中使用。这个“用于处理cookie的php类.zip”压缩包提供了一个专门用来处理Cookie的PHP类,对于...

    php对Cookie进行基本操作的类.zip

    在PHP编程中,Cookie是一种非常常见的用户数据存储机制,它允许服务器在客户端浏览器上存储少量信息,以便在后续请求中使用。这个压缩包文件“php对Cookie进行基本操作的类.zip”提供了一个PHP类,可以帮助开发者...

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

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

    学习PHP Cookie处理函数_.docx

    在PHP中,Cookie是一种常用的客户端存储机制,用于在用户的浏览器上保存信息,如用户偏好、登录状态等。Cookie的工作原理是服务器在响应中发送HTTP头,指示浏览器存储特定的键值对,然后在后续的请求中,浏览器会将...

    php cookie 详解使用实例

    **PHP Cookie 详解与使用实例** Cookie 是一种在 Web 开发中常见的技术,它用于在客户端(用户的浏览器)和服务器之间存储和交换信息。本文将详细介绍 Cookie 的概念、工作原理以及如何在 PHP 中创建、读取、更新和...

    PHP cookie实现保存浏览历史 使用的images图片

    在PHP编程中,Cookie是一种常用的技术,用于在客户端存储数据,比如用户的浏览历史。Cookie能够帮助网站跟踪用户的行为,提供个性化的用户体验。本篇将详细讲解如何使用PHP和Cookie来实现保存用户浏览历史的功能,...

    php更新cookie内容的详细方法

    在PHP中,Cookie是一种在用户的计算机上存储信息的方法,通常由Web服务器创建,并随着请求发送到用户浏览器。在本篇文章中,我们将详细探讨如何更新PHP中Cookie的内容,这对于需要在用户浏览器中持久保存数据的Web...

    用base64加解密cookie的PHP代码类.zip

    在PHP编程中,Cookie是一种常见的数据存储机制,用于在客户端(浏览器)和服务器之间传递信息。为了保护用户数据的安全,通常会使用加密方法对Cookie进行处理。本篇将详细讲解如何使用Base64编码进行Cookie的加解密...

    PHP100视频教程 32:PHP5中Cookie与 Session详解

    1、Cookie和Session简介与区别Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪Cookie是完全保持在客户端的如:IE firefox...

Global site tag (gtag.js) - Google Analytics