session本身代表了一次会话周期,就是一个有效连接的存活长度。
比如你去看电影,电影票就类似session,票的有效期就是session的时长,检票入场就是session验证,票本身能看哪场电影,就是session的属性,看完出来,就是session注销。不会同时存在两个一样的电影票,就是session的唯一性。
session的实现,就是一个唯一性的令牌存储在浏览器中,这个令牌会对应你后端的包数据,数据可以用文件存储,也可以用缓存存储。等浏览器向服务端发送http请求的时候,会在头部信息带着这个令牌一起请求你,然后获取这个令牌,你就可以验证这个令牌的有效性,也可以根据这个令牌索引到后端存储的session数据,验证数据的有效性。比较常见的使用场景,比如登陆,从用户进来就开始分配session来保持用户这一次会话的行为数据,一直到他退出为止。他所有的行为数据都可以通过session校验和存储。
cookie的思路和session类似,只不过cookie的数据是存储在浏览器的客户端中,不存在数据共享的问题。因为cookie是端数据,所以存在一些篡改风险,这也是session相对安全的原因。
当然安全没有绝对的,只是相对的!