web开发:cookie探秘

web开发:cookie探秘

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

先看下维基百科的解释:

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

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

然后再举个栗子:

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

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

由此可见,cookie的安全级别非常高,如果有人窃取了用户在某个网站上的cookie,那么他可以凭这个cookie去冒充原来的用户访问网站以达到某种目的。当然,在正常上网的情况下,cookie不容易被窃取。

下面来看看实际操作:

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

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

cookie的各个属性:

Name:cookie的名字(键)。

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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值