web开发:cookie探秘

web开发:cookie探秘

相信熟悉web开发者对cookie必定不陌生,但相信不少人一开始都跟做者同样,仅仅只是知道这个东西,只知道简单地使用,那么今天咱们就从它的源头谈起。python

先看下维基百科的解释:

Cookie(复数形态Cookies),中文名称为“小型文本文件”或“小甜饼”,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(一般通过加密)。定义于RFC2109。是网景公司的前雇员卢·蒙特利在1993年3月的发明[2]。git

嗯,解释就酱,很简单,说白了就是一种保存一些信息的文本文件,它以键值对的形式保存在浏览器中。github

而后再举个栗子:

你们都有登陆某网站的经历,登陆页面通常都有一个记住密码/下次自动登录的选项,勾选之后下次能够直接访问而不须要再次登陆。然而,登陆一个网站的过程无非就是服务端获取到从客户端发送的帐号密码等信息与数据库里保存的信息进行匹配,若是匹配成功,则说明登陆成功,不然登陆失败。可是,众所周知,http是无状态协议,一旦数据交换完毕,客户端与服务器端的链接就会关闭,再次交换数据须要创建新的链接,这就意味着服务器没法从链接上记录客户端以前的请求。这样的话,当用户登陆了一个网站,等他点击进入另一个页面时,又会回到没有登陆的状态。http的这种机制严重阻碍了交互式Web应用程序的实现,为了弥补这一缺陷,聪明的猿类发明了cookie。经过请求携带的cookie中的信息,服务端能够识别用户并作出适当的响应。web

固然,cookie不是随便给的,尤为是关于我的信息方面的东西。通常来讲,当用户成功登陆一个网站后,服务端就发送一端包含一些能惟一标识这个用户的cookie凭证。通常这个cookie的值由用户的帐号之类的信息经某种加密算法计算出来,具体实现因网站而异,在python-flask中,cookie由response对象的set_cookie(key,value)方法建立cookie,能够添加过时时间参数。当服务端给浏览器设下cookie后,浏览器之后发送的全部请求都将会携带上cookie,直到这个cookie过时,这样服务端就能够经过cookie去判读发送这个请求的用户是否登陆以实现不一样的功能了。算法

因而可知,cookie的安全级别很是高,若是有人窃取了用户在某个网站上的cookie,那么他能够凭这个cookie去冒充原来的用户访问网站以达到某种目的。固然,在正常上网的状况下,cookie不容易被窃取。chrome

下面来看看实际操做:

访问github首页(已登陆),打开chrome的开发者工具,选择network,找到github.com记录,点击查看cookie,能够看到以下记录:

request cookies是浏览器发送请求时发送的cookie
response cookies 是服务器给浏览器发送的cookie数据库

cookie的各个属性:

Name:cookie的名字(键)。flask

Value:cookie的值。跨域

Domain: cookie的域名,cookie是不可跨域名的。域名www.google.com颁发的Cookie不会被提交到域名www.zhihu.com去。这是由cookie的隐私安全机制决定的。隐私安全机制可以禁止网站非法获取其余网站的cookie。浏览器

Path: cookie的路径,domain属性决定运行访问Cookie的域名,而path属性决定容许访问cookie的路径,通常状况下,cookie的path是"/",也就是该域名下的全部路径都可使用,若是设定了特定的path,那么这个cookie只能在相应的路径下使用。

Expires:cookie的过时时间,cookie在过时时间以内是持续有效的。也有永久cookie,除非手动清除,不然不会自动消失。

Secure: cookie的安全属性,HTTP协议不只是无状态的,并且是不安全的。使用HTTP协议的数据不通过任何加密就直接在网络上传播,有被截获的可能。使用HTTP协议传输很机密的内容是一种隐患。若是不但愿Cookie在HTTP等非安全协议中传输,能够设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。

cookie的分类:

Cookie老是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。

内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过时时间,除非手动清理或到了过时时间,硬盘Cookie不会被删除,其存在时间是长期的。因此,按存在时间,可分为非持久Cookie和持久Cookie。

cookie的弊端:

虽然cookie给开发者和用户带来了许多便利,但它不可避免地暴露了许多弊端

1.Cookie会被附加在每一个HTTP请求中,因此无形中增长了流量,给本来已经拥堵不堪的网络带来更大的负担。
2.因为在HTTP请求中的Cookie是明文传递的,被拦截后拦截者能够直接使用。(除非用HTTPS)
3.Cookie的大小限制在4KB左右。对于复杂的存储需求来讲是不够用的

关于cookie的介绍就到这里了,不足之处欢迎批评指正。

转载请注明出处,文章也一同发表在了个人我的网站上,欢迎你们来访(http://www.zhibinnet.com)。

相关文章
相关标签/搜索