入坑前端13:关于Cookie
会话机制
在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session)。
例子:
A.浏览网站时,典型的会话场景
浏览视频网站,观看视频,昨天刚看了一段,今天打开网站,显示你昨天观看的历史记录。
前两天我在京东上逛了半天,看了一些手机,今天一打开网易,结果就推送一堆的手机广告
淘宝购物,在浏览的时候,将某个商品加入了购物车,第二天再次登录,购物车中还有商品
针对网站的某些页面,如果你没有登录,就不能访问
B.结合日常生活中的会话来理解
image.png
浏览网站时,如何维护其用户状态呢?(不同时刻、不同页面)
HTTP协议本身是无状态的。
需要,维护(跟踪)用户的状态,就需要使用某种机制---会话机制
有如下两种会话技术:
●Cookie
●Session
其中,cookie是基于浏览器端的会话技术,session是基于服务端的会话技术。
session通常都会依赖cookie。
Cookie的格式
根据Netscape公司的规定,Cookie格式如下:
Set-Cookie:name=value;expires=date;path=/directory;domain=.xx.com;secure
包含5个部分:
●name = value,名值对,表示cookie的名称。必选
●expires = date,指定cookie失效的时间,如果没有指定,则cookie不会写入磁盘,只持续到当前会话结束(通常就是关闭浏览器)。该属性值DATE必须以特定的格式来书写:星期几,DD-MM-YY HH:MM:SS GMT,GMT表示这是格林尼治时间。反之,不以这样的格式来书写,系统将无法识别。
●path = /directory,只有访问/directory下面的页面时,cookie才被发送。如果指定了path,但path与当前访问的url不符,则此cookie被忽略。如果缺省,path的属性值为web服务器传给浏览器的资源的路径名。
●domain=.xx.com,指定cookie被发送到哪台计算机上。正常情况下,cookie只被送回最初向用户发送cookie的计算机。如果设置domain=xx.com,则cookie会被发送到任何在xx.com域中的主机。如果domain为空,domain就设置为和提供cookie的服务器相同。如果domain不为空,但它的值和提供cookie的web服务器域名不符,这个cookie将被忽略。
●secrue,如果设置了,则cookie只能通过ssl通道,即https。
这充分的说明,cookie是作为响应头信息,从服务端发送到浏览器端的。
使用原生的setHeader方法,来设置如下:
image.png
在network中查看如下:
image.png
小结:cookie是作为响应头信息从服务端发送给浏览器端的,需要遵循cookie的格式。
任何一次http请求,浏览器都会自己携带cookie,向服务端发送http请求。所以,我们只需要在服务端获取cookie就可以了。
站在服务端,要获取来自浏览端的信息,我们能想到的就是req对象了。**
(6).cookie基本原理
Cookie的传输过程,如下:
其中,从浏览器端-->服务器端,cookie是以请求头的方式传递。
从服务端-->浏览器端,cookie是以响应头的方式来传递的。
使用network来分析这个过程:
第一次访问,请求头中,没有cookie信息
image.png
此时,服务端向浏览器端发送了一个cookie,如下:
image.png
后续的请求,在请求头中,会携带cookie信息
image.png
所以实际情况如下
image.png