先谈 cookie
网络传输基于的Http协议,是无状态的协议,即每次连接断开后再去连接,服务器是无法判断此次连接的客户端是谁。
如果每次数据传输都需要进行连接和断开,那造成的开销是很巨大的。
为了解决这个问题,cookie就应运而生,当用户登陆成功,服务器会在返回响应数据的同时也携带着cookie给到客户端,
之后客户端每次发起请求只要携带着这个cookie,那就免去登录的步骤。cookie是保存在客户端的数据。
这确实极大改善了网络传输的效率。当时由于cookie是保存在浏览器客户端的,所以也很容易被提取,这在安全方面存在隐患。
再谈session
session的实现需要依赖于cookie,其本质也是通过以cookie的方式向客户端发送随机字符串,每次客户端发起请求时只要携带
该随机字符串便可很容易进行验证。下面大概写下整个session过程的原理。
- 用户发出登录请求
- 判断账户密码是否正确
- 如正确,则返回数据并在cookie中写随机字符串(sessionID),并且在服务端以{随机字符串:{'k':'v'}}的形式存储用户相关数据
- 下次同个客户发送请求,携带cookie(包含sessionID)
- 服务端会判断cookie是否包含sessionID,如有再去服务器内存中查询该sessionID 是否有对应的数据,如果有,则说明是登录过的用户,返回数据。
session是保存在服务端的数据。
由此可见,session是不会向客户端发送敏感信息的,随机字符串即使被人窃取,也无法简单在客户端被恶意行为伪造请求。