Session和Cookie

2021-04-10  本文已影响0人  HYIndex

我们知道HTTP协议是无状态的,那么在Web开发中如何做好用户的整个浏览过程的控制,最经典的解决方案就是使用Cookie和Session。
Cookie是客户端的机制,把用户数据缓存在客户端,而Session是服务端的机制,每个用户都会被分配一个唯一的SessionID,可以通过url传输或保存在客户端的Cookie中,也可以将Session保存在数据库中,比如Redis中。

Session和Cookie是怎么来的?

假如你在浏览器上从来没有登录过GitHub,当你第一次登录的时候需要输入用户名和密码进行验证,通过验证后会调到个人首页,那么在登录成功后你点击你的某个代码仓库的时候服务器如何验证你的身份呢?因为HTTP协议是无状态的,服务器并不知道你上次已经验证过了,一种方法是每次请求都带上用户名和密码,这显然会导致用户体验极差。那么就需要再客户端或服务器上保存身份信息了,于是Cookie和Session就产生了。

Cookie

Cookie原理

Cookie就是本地计算机保存一些用户操作的历史信息,用户再次访问时在HTTP请求头中带上Cookie信息,服务端就可以对其进行验证。


数据内容

Cookie本质上是由浏览器管理存储在客户端的一小段文本,Chrome浏览器可以使用EditThisCookie插件来管理Cookie,如下图所示。


会话Cookie和持久Cookie

Session

Session原理

Session是服务器用来保存用户操作的历史信息的,使用SessionID来标识Session,SessionID由服务器产生,保证随机性和唯一性,相当于一个随机秘钥,避免在传输中暴露用户真实密码,但是服务器仍要将请求对Session进行对应,需要借助Cookie保存客户端的标识(SessionID)。


当服务器需要对某个请求创建Session的时候,首先检查这个客户端的请求是否包含了SessionID,如果已经包含则表示次客户端之前已经创建过,只需要根据SessionID查询对应的Session。如果请求没有携带SessionID,则会生成一个Session和对应的SessionID,同时在本次响应中返回SessionID。

参考

【1】build-web-application-with-golang

上一篇下一篇

猜你喜欢

热点阅读