session和cookie关系
之前总是对session和cookie这两个概念很模糊,今天就研究下他们的原理和关系
在说session和cookie之前,我们先来说说session和cookie出现的原因
众所周知,http是无状态的,也就是说在客户端和服务器连接期间,客户端向服务器发送的请求是不带用户信息的,所以我们是无法辨别出这个请求是哪个用户发出的。
为了解决这个问题,就得借助其他技术,cookie和session就由此诞生
首先需要阐明的一点:session是一种网络通讯的会话机制,而cookie只是实现这种机制的主流方案中的一个,cookie一般是用来保存sessionID的
Cookie原理
Cookie是存储在客户端的一段数据,通常记录一些网站的密码和用户名等,当客户端发送请求的时候,服务端需要记住这个用户的信息,就在返回给前端的数据中设置Cookie,客户端接受到这个请求后,会把Cookie保存起来,当再次访问服务器的时候将会带上这个Cookie,服务器通过这个Cookie来获取用户状态
基本过程:
Cookie有很多的参数,可以根据这些参数设置Cookie的过期时间和是否能被js更改等
如果客户端禁用了Cookie,通常客户端会采用url重写技术,比如会在url后面加上一个诸如sid=xx的参数
Session原理
session是保存在服务端的,当用户登录系统后,服务端会根据一个算法,生成一个sessionID,这个sessionID唯一标识一个会话,服务端将这个sessionID存储在内存中,数据库或者文件当中,并设定一定的有效期,并将sessionID写入到Cookie当中返回给客户端,当下一次客户端请求的时候会带上sessionID,服务端会将客户端中的Cookie与服务端中记录的进行比较,从而确定一个会话
基本过程: