第2章-会话技术

简介

在Web应用中,HTTP请求是无状态的。即:用户第一次发起请求,与服务器建立连接并登录成功后,下次再访问依然需要身份认证,为了避免每次打开一个页面都需要登录一下,就出现了Cookie,Session。

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息。Cookie存储的数据量有限,且都是保存在浏览器中。不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用Cookie实际上只能存储一小段的文本信息。另外同一域下Cookie的个数也有限制,不宜过多。

Session

Session是另一种记录客户状态的机制,通常它是在服务端保存的一个数据结构,这个数据可以保存在集群、数据库、文件中,用于跟踪用户的状态。浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

用户第一次登录后,浏览器会将用户信息发送给服务器,服务器会为该用户创建一个SessionId,并在响应内容(Cookie)中将该SessionId一并返回给浏览器,浏览器将这些数据保存在本地。当用户再次发送请求时,浏览器会自动的把上次请求存储的Cookie数据自动的携带给服务器。

服务器接收到请求信息后,会通过浏览器请求的数据中的SessionId判断当前是哪个用户,然后根据SessionId在Session库中获取用户的Session数据返回给浏览器。

如果说Cookie机制是通过检查客户身上的通行证来确定客户身份的话,那么Session机制就是通过检查服务器上的客户明细表来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

Token

当客户端频繁向服务端发出请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否。而Session的存储是需要空间的,频繁的查询数据库给服务器造成很大的压力。于是就有了Token。

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌。当客户端第一次访问服务端,服务端会根据传过来的唯一标识,运用一些算法,并加上密钥,生成一个Token,然后通过BASE64编码一下之后将这个Token返回给客户端,客户端将Token保存起来(可以通过数据库或文件形式保存本地)。下次请求时,客户端只需要带上Token,服务器收到请求后,会用相同的算法和密钥去验证Token。

JWT

加密生成Token的算法可以是任意的,传输的形式也是多种多样(Cookie、Header),Flask默认的Session处理方案就是一种使用Cookie传输的Token,每个人都有自己的Token生成方案,有没有统一的规范和要求,以便更好的使用Token,于是就有了JWT

results matching ""

    No results matching ""