cookie

简介

要了解cookie, 先要从HTTP协议提及. 所谓协议, 就要有发起协议的人, 遵照协议的人, 具体来讲, 通常就是服务端和客户端, 双方遵守HTTP协议的内容.php

HTTP协议有如下特色:浏览器

1, 支持客户/服务器模式;服务器

2, 简单快速: 不管是客户端请求仍是服务端响应,设置好对应的消息头,方法,消息体,就可以传达给对方,而且双都能理解对方的意思。cookie

3, 灵活: HTTP容许传输任意类型的数据对象。传输的类型由Content-Type加以标记便可。session

4, 无链接: 客户端请求服务端,服务端响应完成以后就自动断开链接本次连接。函数

5, 无状态: 客户端请求服务端,服务端响应完成以后不会记录任何本次链接通讯的数据。网站

固然,HTTP协议远远不止这么多,具体的咱们后期再说,有了上面的HTTP协议的知识,咱们就要引出咱们的cookie了。url

上面提到,因为HTTP的无状态特色, 服务端响应完客户端的请求以后, 不记录任何本次链接的通讯数据, 这样就形成一个问题, 就是服务端"记不住"客户端的请求, 产生"你是谁"的问题. 就比如大楼里的保安大叔, 每一个进入大楼的人都要登记身份, 并且这位保安大叔还记不住人, 致使每一个人每次进入大楼都要作一次身份校验, 这样就很费时间,耗费人力了.spa

那怎么解决这个问题呢? 这里就用到了cookie. 就是服务端在响应完客户端请求的时候, 在返回数据的时候, 给客户端一段数据, 下次客户端请求的时候, 带上这段数据, 这样服务端就知道是"哪一个"客户端在请求了. 就比如保安大叔给了你一个小纸条, 上面写着每一个人的编号, 下次进入大楼, 只要把小纸条给保安大叔看一下, 他认识上面的字, 就知道你以前来过, 确认了你的身份, 就直接放行了, 免除了再次登记和校验的过程.对象

OK, 这样一圈下来, 咱们知道, cookie就是服务端返回给客户端的一小段数据, 这段数据记录这本次请求的一些信息, 最主要的, 就是一些身份信息. 这样在下次请求的时候带上, 服务端就知道你上一次请求的状态和相关信息, 让请求有了状态, 有了记忆.

不少人在存储一些数据的时候不推荐使用cookie,缘由在于每次客户端请求服务端的时候,都会带上cookie信息,cookie虽然一般一个value值只有4K大小,可是量一旦上来就会很费带宽。

基本工做原理

cookie主要是经过报头HTTPHeader来传递数据。也就是在请求头和消息头里面传递数据。Cookie机制定义了两种报头:Set-Cookie报头和Cookie报头。set-cookie存在于服务器响应的消息头中。而cookie则存在于客户端请求的消息头中。

cookie的运行流程以下:

1, 客户端在浏览器的地址栏中键入Web服务器的URL,浏览器发送读取网页的请求。

2, 服务器接收到请求后,产生一个Set-Cookie报头,放在HTTP报文中一块儿回传客户端,发起一次会话。

3, 客户端收到应答后,若要继续该次会话,则将Set-Cook-ie中的内容取出,造成一个Cookie.txt文件储存在客户端计算机里。

4, 当客户端再次向服务器发出请求时,浏览器先在电脑里寻找对应该网站的Cookie.txt文件。若是找到,则根据此Cookie.txt产生Cookie报头,放在HTTP请求报文中发给服务器。

5, 服务器接收到包含Cookie报头的请求,检索其Cookie中与用户有关的信息,生成一个客户端所请示的页面应答传递给客户端。 浏览器的每一次网页请求,均可以传递已存在的Cookie文件,例如,浏览器的打开或刷新网页操做。

在PHP中设置cookie有两种方式:

1, setCookie函数的调用

2, session_start函数的调用

这里稍微解释下session_start作的工做,session_start()一旦写上,服务器端就会在服务器上生成一个session_id,并同时向客户端发送set-cookie报头,内容为phpsessid=session_id, 客户端接到响应就会生成cookie文件,也就是session_start里面其实包含了setCookie的操做,只是没有setCookie那么灵活而已。

cookie的属性

主要包括:Name名字,Value值,Domain域, Path路径, Expires/Max-Age过时时间, Size数据大小等等。 

Name-Value相似于Key-Value的键值对,在请求的时候选择性地带过去就能够。

Domain域,就是这个键值对,在哪一个域名下有效,能够被使用。其中.baidu.com表示以baidu.com结尾的全部域名,还能够指定其余子域,如map.baidu.com等。

Path路径,就是跟在域名后面的URL路径,好比/或者/map等等,路径与域合在一块儿就构成了cookie的做用范围。表示这个键值对,在请求哪些url路径或者其对应的服务器文件的时候,能够被使用。好比,/表示该域名下的全部url均可以使用这个键值对,/search表示该域名/serach下的url才可使用该键值对。  

相关文章
相关标签/搜索