Open goldEli opened 5 years ago
一个有登录验证的网站,需要在有效时间内保存用户的登录状态,不然用户需要频繁验证密码。
可以用 Session 保存用户的登录信息。
用户登录验证成功后,服务器端返回一个字符串,接下浏览器发起的所有请求会带上这个字符串,服务器校验这个字符串,就能判断用户是否已登陆过。
Session 有两个问题:
服务器1
,并将 session 储存到服务器1
,但之后的请求被随机到了服务器2
,那么 session 就找不到了,即使 session 与服务器1
关联,但服务器1
挂了呢?所以可不可以不存 Session 呢?
当用户验证成功后,服务器把用户的基本信息用秘钥生成一个字符串,然后把字符串和用户基本信息发给用户,用户下次请求会带上这个字符串和用户基本信息,服务器再用秘钥解密这个字符串,得到用户的基本信息后进行比对,如果相等则校验通过,反之则需要重新登录。
Token 很好的解决 Session 需要存储的问题,是目前最主流的验证方式。
不管是采用 Seesion
还是 Token
,浏览器都需要存一些服务器要求存的东西,这种储存方式就叫 Cookie
,Cookie
由服务端生成,key value 的方式存在。为了不占用太大的空间,每个域下面的 cookie 都有所限制。
session和token都是服务器用来验证请求合法性的手段。 session
token
session和token区别就是,token少了在服务器存储的过程,这在大体量数据时,优势很明显,因为token相比session少了一次查询,会提高效率。
cookie
上面的token和session,都是服务器生成,然后返回客户端,客户端会将session或token存在本地,每次请求都会携带发送,这个客户端本地存储技术,就是cookie。
当web服务器向浏览器发送web页面时,在关闭连接后,服务端并不会记录用户的信息,cookie的作用就是用于解决如何记录用户端的客户信息。cookie以键值对形式存储。
session是另一种记录客户状态的机制,不同于cookie保存在浏览器上,session保存在服务器上。每个用户访问服务器都会建立一个session,并分配一个sessionId。客户再次访问的时候直接查询session状态。
token是服务器生成的一串字符串,以作为客户端进行请求的一个令牌。当用户第一次登陆后,服务器生成一个token并将其返回客户端,之后客户端只需带上token请求数据即可,无需再次验证用户信息。使用token的目的是减少服务器压力,减少频繁查询数据库。
说说对 Cookie,Session,Token 的理解。