目录
一:HTTP Cookie
二:HTTP Session
假设有这么一个场景:比如登录一次bilibili,后续在访问就不需要登录了,又因为HTTP是无状态有,无连接的,无状态指客户端与服务器的请求是独立的,HTTP并不会保存客户端的任何信息,即使历史访问过。无连接指每次请求都会建立一次连接,结束关闭该连接,即:HTTP/1.0,比如后续采用HTTP/1.1持久连接:Keep-Alive等。
一:HTTP Cookie
1. HTTP Cookie(也称为 Web Cookie、浏览器 Cookie 或简称 Cookie)是服务器发送到 用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发 起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一 浏览器,如保持用户的登录状态、记录用户偏好等。
1.1:当用户第一次访问网站时,服务器会在响应的 HTTP 头中设置 Set-Cookie字段,用于发送 Cookie 到用户的浏览器。
1.2:浏览器在接收到 Cookie 后,会将其保存在本地。
1.3:在之后的请求中,浏览器会自动在 HTTP 请求头中携带 Cookie 字段,将之前保存的 Cookie 信息发送给服务器。
2.1:内存级(会话)Cookie/文件级(持久)Cooike:
1. 浏览器也是一个进程,内存给进程分配空间,保存的Cookie也就会在内存里面,当浏览器关闭,Cookie也就释放了,下次打开浏览器再次请求就不会携带Cookie了
2. Cookie也可以保存在浏览器内部的某个文件里,每次请求预先读取该数据传入Cookie,比如关闭浏览器,再次打开服务器也能识别用户身份。
Cookie参数选项:
Set-Cookie: username=peter; expires=Thu, 18 Dec 2024 12:00:00
UTC; path=/; domain=.example.com; secure; HttpOnly
username表示Cookie的唯一性,也急速Key,expires表示将来某个时间Cookie到期,path表示比如/目录,该目录下的所有资源都会携带Cookie,否则访问特定path才会提交,domain表示该Cookie提交指定的域名,比如只会访问bilibili,而不会访问其他的域,secure表示只能通过HTTPS协议发送,主要保证安全性,HttpOnly表示只能由HTTP访问该Cookie,防止恶意攻击。
3. 单用Cookie有什么问题?
Cookie是保存在客户端的,由客户端进行维护,假设Cookie写在某个文件里被窃取,攻击者就用盗取的Cookie向目标服务器发送请求,身份被冒领,一些用户的浏览痕迹和其他信息也保存在Cookie里,也就是隐私泄露,如果Cookie采用明文传输,比如账号密码也会泄露,所以基于这些问题引入Session,他是保存在服务器内,由服务器进行维护。
二:HTTP Session
1. HTTP Session 是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于 HTTP协议是无状态的(每个请求都是独立的),因此服务器需要通过 Session 来记住用户的信息。
原理:客户端向目标服务器首次进行请求,比如携带账号和密码,服务器解析通过算法生成Sessionid返回给客户端,包括客户端的基本信息也保存在服务器内,服务器设置Set-Cookie:Sessionid 返回给客户端,客户端后续用Cookie里的Sessionid来和服务器进行身份识别。
Session也可以设置过期时间,过期服务器清理Session对应的对象。
安全性:客户端的数据是保存在服务器内的,所以私密信息相对安全,但Sessionid被窃取,用户身份一样会被冒领,但可以加一些策略,比如服务器维护用户的活跃指数,ip地址,可能甄别出Sessionid被盗取从而清理Session对象。
总结:Cookie和Session都可以用来做用户认证和会话保持,跟踪用户状态,各有优缺点,Session相对于Cookie是比较安全的,Session一般和Cookie搭配使用。