http协议本事是无状态的,进入web2.0,交互设计时代,引入了session和cookie技术来实现状态的记录。
Sesion和Cookie的特征:
- Session和cookie都是服务器生成的,都是键值对应的。(key,value)
- Session保留在服务器端,cookie返回给客户端。
一般而言,session ID会以类似于cookie的形式返回给客户端。
Session ID是服务器端用来识别、读取服务器上所存储的session值的一个标志字段。 - Session和cookie都是有生命周期的。
浏览器在向服务器发送请求的时候,会自动将客户端所保留的、存活的cookie封装在请求头cookie中向服务器发送 - 对于cookie:它的生命周期由两个因素决定
- Cookie自身的生命周期,有服务器生成该cookie时指定
- 客户端是否保留cookie
PS:客户端是否保留cookie仅是对客户端自身有效,对于封包工具(各种接口、性能测试工具)无效的。
- 对于session而言:它的生命周期也和两个因素有关:
- 服务器端对于session的存储周期设置。
- 客户端进程是否关闭。(cookie中的session ID失效,session ID和进程捆绑)
PS:客户端进程关闭,仅是对客户端自身有效,对于封包工具(各种接口、性能测试工具)无效的。
- Session和cookie都是有其作用域的。
为什么session比cookie要安全?
- Session的键值都是存储在服务器端,对于用户来说是完全未知的
- Cookie的键值是会返回给客户端,对于用户来说是完全可知的。(虽然cookie加密,但是依旧可能被破译)
那么用户就可以根据cookie的键值来反向推测服务器对于cookie的使用逻辑,进而进行cookie的伪造
状态记录实质机理:
请求A:需要记录状态的操作。
一般来说,服务器就会返回特定的状态记录字段,根据技术不同,常见的有session、cookie、token、csrf、表单字段等。
请求B:依赖于请求A的操作,需要用到状态字段。
一般就会添加cookie管理器、做关联等操作。
网友评论