前提
我们经常会遇到网页登录的情况,有的登录之后可以连续访问很多次网站,有的过一段时间就需要重新登录,有的只要登录过一次,关闭浏览器重新打开也不会失效,这里面涉及到了session和cookie
输入用户名和密码才能登录网站,看到网页的详细内容,进行一些操作,这种就像现在疫情期前,去任何公共场所,需要你的绿码凭证,有了这个凭证,保持我们的登录状态,可以任意访问这个网页。那怎么去保存这个凭证呢
详解
http的无状态
了解这个具体的如何保存凭证之前,我们也需要知道,为什么要保存这个登录凭证,因为大家都知道http协议的特点之一就是无状态,它没有记忆事务处理的能力,想象一下登录,每次发送一次请求输入一次用户名密码,再发一次就又输入用户名和密码,这样就太麻烦了,所以用于保持http连接状态的的技术就出现了,也就是前面所说的如何保存凭证的技术,它们就是cookie和session
session
session在服务器端,也就是网站的服务器段保存用户的session登录信息,详细来说就是有个session对象,来存储特定用户的会话所需的属性和配置信息。当用户在页面之间来回跳转时,存储在session对象中的变量将不会丢失,这样会一直保持这个session会话,一直当这个session过期。
cookie
cookie在客户端,也就是说在浏览器端,有了cookie,浏览器再下次访问相同的网页时就会自动附带上它,并发送给服务器,服务器通过识别cookie确认是哪个用户在访问
session和cookie的配合
(1)客户端第一次请求服务器时,比如我们第一次登录时,服务器会返回一个响应头给客户端,这个响应头里有个set-cookie字段,这个字段用来标记用户。
(2)客户端会把这个cookie保存起来,下次请求相同网站,比如跳转到同一个网站的其他页面,就会把这个cookie放在请求头,发送给服务器。
(3)服务器解析cookie中的相关信息,和自己的session信息进行比对,如果传给服务器的cookie是无效的,或者服务器那边的session过期了,那么就可能会收到错误响应不能访问,或者是跳转到登录页面重新登录。
会话cookie和持久cookie
其实并没有会话cookie和持久cookie之分,只是max-age/expires设置的时间长短罢了 例如掘金的这个就设置到了2023年