HTTP之Cookie&Session


Cookie

- 什么是cookie?

MDN是这样说的:HTTP Cookie(也叫Web cookie或者浏览器Cookie)是服务器发送到用户浏览器并保存在浏览器上的一块数据,它会在浏览器下一次发起请求时被携带并发送到服务器上。


- 设置cookie
  1. 服务器通过在响应头里添加一个 Set-Cookie的字符串创造cookie,其格式如下(中括号中的部分是可选的):
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]

注意:value部分通常是name=value 格式的字符串,这一项必须填。

  1. 当浏览器在收到的响应报文看到含有Set-Cookie这个字段以后,这个cookie值就会在随后的每次请求中被发送至服务器,cookie值被存储在名为 Cookie 的 HTTP 请求头中,并且只包含了 cookie 的值,忽略全部设置选项。例如:
Cookie: value

注意:这里只有value会发给服务器,在Set-cookie里的可选设置选项只会在浏览器端使用,不会发回给服务器。如果有多个value,可以用逗号隔开,例如:

Cookie: value1; value2; name1=value1

- expires

expires指定Cookie的有效期,它的选项的值是一个 GMT 日期格式的值,例如:

Set-Cookie: name=chiang; expires=Tue, 20 Jun 2017 07:17:37 GMT

如果我们没有设置expires属性,cookie 的生命周期仅限于当前会话中,关闭浏览器意味着这次会话的结束,所以会话 cookie 仅存在于浏览器打开状态之下。如果expires属性的值是一个过去的时间,那么cookie将会被浏览器立即删除。


- domain

指定了 cookie 将要被发送至哪个或哪些域中。默认情况下,domain 会被设置为创建该 cookie 的页面所在的域名,
domin属性将指定作为Cookie适用对象的域名,即cookie将会被发送至哪个或者哪些域名中。默认为为创建Cookie的页面所在域名。
domain属性可以扩充 cookie 可发送域的数量,例如

Set-Cookie: name=chiang; domain=chiang.com

这里我们把domain设置为chiang.com,那么如果我们从a.chiang.com、b.chiang.com发送请求,就可以将该 cookie 的值发送至所有这些站点。因为浏览器会把 domain 的值与请求的域名做一个尾部比较(即从字符串的尾部开始比较),并将匹配的 cookie 发送至服务器。
注意:domain值必须是发送 Set-Cookie 消息头的主机名的一部分,因为这会产生安全问题。不合法的 domain 选择将直接被忽略。


- path

path属性指定了请求的资源 URL 中必须存在指定的路径时才会发送Cookie 消息头。默认为当前发送Set-cookie请求所对应URL的path部分。

Set-Cookie:name=chiang;path=/blog

在这个例子中,path 选项值会与 /blog,/blogxxx 等等相匹配;任何以 /blog 开头的选项都是合法的。
注意:只有在 domain 匹配完毕之后才会对 path 属性进行比较。


- source

source属性只是一个标记而没有值。只有当一个请求通过 SSL 或 HTTPS 创建时,包含 secure 选项的 cookie 才能被发送至服务器。

Set-Cookie:name=chiang;path=/blog

默认情况下,在 HTTPS 链接上传输的 cookie 都会被自动添加上 secure 选项。


- cookie 自动删除

cookie 会被浏览器自动删除的情况:

  1. 会话 cookie (Session cookie) 在会话结束时(浏览器关闭)会被删除
  1. 持久化 cookie(Persistent cookie)在到达失效日期时会被删除
  2. 如果浏览器中的 cookie 数量达到限制,那么 cookie 会被删除以为新建的 cookie 创建空间。

-HTTP-Only cookies

HTTP-Only 的意思是告诉浏览器这个 cookie 绝不能通过 JavaScript 的 document.cookie 属性访问。这个属性是为了帮助阻止通过 JavaScript 发起的跨站脚本攻击 (XSS) 窃取 cookie 的行为。
要创建一个 HTTP-Only cookie,只要在 cookie 中添加一个 HTTP-Only 标记即可:

Set-Cookie: name=chiang; HttpOnly

Session

- 什么是session

维基百科关于session的解释:

在计算机科学领域来说,尤其是在网络领域,会话session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制,session在网络协议(例如telnetFTP)中是非常重要的部分。

- 通过cookie来管理session

由于HTTP是无状态协议,也就以为着它无法实现状态管理,例如登陆认证成功的用户状态无法在协议层面保存下来。当该用户下一次继续访问就无法区分他与其他的用户。于是我们使用Cookie 来管理Session,以弥补HTTP 协议中不存在的状态管理功能。
步骤:

  1. 客户端把用户ID和密码等登录信息通过请求报文发送给服务器
  2. 服务器收到请求后,给该用户标记Session ID(如PHPSESSID=048z9j…,为了防止这个ID被盗用,最好将其设置成难以推测的字符串,保证安全),记录其认证状态。然后将这个Session ID写入响应头的Set-cookie。
  3. 客户端在接收到从服务器端发来的Session ID 后,会将其作为Cookie 保存在本地。下次向服务器发送同样的请求时,浏览器会自动发送带有Session ID的Cookie,服务器端可通过验证接收到的Session ID 识别用户和其认证状态。

以上是一个登录认证的session示例,通过这个例子我们可以了解session的基本原理,其实session可以理解为是服务器对cookie的一个映射。

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

推荐阅读更多精彩内容