关于Cookie的细致总结

Cookie概述

HTTP是一种无状态的请求/响应协议,用户通过浏览器访问Web站点后,Web服务端没有可用信息来判断是哪个用户发起的请求,更加无法知道下次访问的还是不是上次访问的用户,无法识别当前用户。最初,为了解决这个问题出现了很多解决方案,例如客户端IP地址跟踪、用户登录认证、URL中嵌入识别信息等,但都没有很好的解决根本问题。然而,Cookie的设计实现很好的解决了这个问题。用户通过浏览器访问Web站点后,服务端会将一些Key/Value组合的键值对通过Set-Cookie或Set-Cookie2返回给浏览器,用户再次访问Web站点时浏览器会将符合条件的键值对再发送给服务端,这样服务端就可以通过这个键值信息识别出当前用户。

Cookie分类

Cookie可以分为两类:会话Cookie和持久Cookie。会话Cookie是一种临时Cookie,没有设置它的有效期,当用户退出浏览器的时候,它将会被删除。当设置了Cookie的有效期后,它就是持久Cookie,它可以被存储到硬盘上,当用户退出浏览器或机器重启时,它依然存在,可以被再次读取使用。

Cookie版本

当前可使用的Cookie规范有两个版本:Cookie版本0和Cookie版本1。Cookie版本1是对Cookie版本0的扩展,版本1可以和版本0互操作,但是Cookie版本1没有Cookie版本0使用的广泛。

Cookie版本0属性

版本0定义了Set-Cookie响应首部、Cookie请求首部。

Set-Cookie响应首部,其实就是服务端返回的Cookie信息,具体的语法如下:

Set-Cookie:key=value;expires=date;domain=domain;path=path;secure

Key/value表示在服务端可跟踪、可识别的用户信息;expires表示Cookie的结束日期,如果没指定,Cookie会在用户退出浏览器时过期;domain告诉浏览器这个Cookie可以被发送到哪个域名,如果没指定,默认为产生Cookie的服务器主机名,浏览器会存储很多不同网站的Cookie,浏览器会根据domain的值将Cookie发送到对应的域名下;path指定Cookie对哪些请求路径生效,如果没指定,默认为产生Cookie的URL路径;secure表示在使用SSL安全连接时才发送Cookie,若没设置secure,则没限制。例如:

Set-Cookie:member_id=1496800101;expires=Tuesday 16-Aug-01 22:10:11 GMT;domain=“abc.com";path=/member;secure

Cookie请求首部,就是浏览器请求服务端时发送的Cookie信息,具体语法如下:

Cookie:key1=value1;key2=value2;key3=value3...

例如:

Cookie:member_id=1496800101

Cookie版本1属性

版本1定义了Set-Cookie2响应首部、Cookie2请求首部。这个版本做了如下一些改动:

为每个Cookie添加了解释性文本,用于解释其目的;

用户退出浏览器时,允许不考虑过期时间,将Cookie销毁;

使用相对秒数来设置Cookie的生存时间;

对Cookie的生效限制,添加了端口条件,可以通过domain、path和port来共同限制;

在发送Cookie请求首部时,会将domain、path和port一起发送到服务端;

为了实现版本的互操作,使用版本号;

使用$前缀来附加服务端返回的Cookie信息。

Set-Cookie2响应首部具体语法如下:

Set-Cookie2:key=value;Version=“1”;Comment=Comment;CommentURL=CommentURL;Discard;Max-Age=age;domain=domain;path=path;Port=Port;secure

Version对于Cookie规范的版本;Comment说明服务器如何去使用这个Cookie;CommentURL表示一个URL,指向描述该Cookie的文档;Discard表示如果设置此标识,会在浏览器退出时放弃此Cookie;Max-Age使用相对当前时间的秒数来设置Cookie的生命周期;Port表示对Cookie生效的端口,多个端口可用逗号分隔。

Cookie2请求首部会回传每个Cookie的附加信息,也就是Set-Cookie2中的属性信息,例如:

Cookie:$Version=“1”;member_id=14690801;$Domain=“abc.com”;$path=/member

Cookie缺点

虽然Cookie可以很好的解决识别用户的问题,但是,它也有很多的缺点:

不安全,容易被破坏或盗取;

Cookie存储在浏览器中,浏览器对Cookie的数量和大小有限制;

Cookie中数据量很大时对性能和带宽有所损耗。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容