Cookie、session、token、sessionStorage、localStorage

Cookie  

cookie,指的就是浏览器里面存储的一种数据。

由服务器生成---->发送给浏览器,浏览器把cookie以kv形式保存起来,

下一次请求同一网站时浏览器会把该cookie自动携带------>发送给服务器。

cookie不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

服务端用session去管理cookie:

1、存储在服务端:通过cookie存储一个session_id,具体的数据是保存在服务器端session中。请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。专业术语叫做serverside session。

2、存储在客户端:将session数据加密,然后存储在cookie中。专业术语叫做clientside session。flask采用的就是这种方式。

有效期:cookie默认的有效期是浏览器关闭之前,但是可以通过cookie提供的方法max-age来设置(在服务端),单位是s,过了有效期会被删除。

作用域:该页面和该页面同级目录或者子目录的其它web页面可见。通过path和domain属性来配置。可以将页面以隐藏<iframe>的形式加载进来,随后就可以读取了。

子域之间如果要跨域共享cookie,如:B.A.com想访问C.A.com域下的cookie,需要设置domain为主域.A.com。

检查:检查浏览器是否启用cookie,判断navigator.cookieEnabled是否为true。

修改:需要使用相同的名字、路径、域,然后重新设置cookie的值。

删除:需要使用相同的名字、路径、域,指定一个非空值,并将max-age设置为0。

Session 

session,存储在服务器,服务器要知道当前发请求给自己的是谁,为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用cookie 的方式。

服务器使用session把用户的信息保存在服务器上,Session的默认失效时间是30分钟,从不活动开始计时。可以通过提供的方法设置。

session存储方式相对cookie来说更安全。

session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。


Token 

就是对数据做签名。 用某个特定的算法 + 一个密钥=签名,  把这个签名和数据一起作为token 。

tokens

是多用户下处理认证的最佳方式:

以下几点特性会让你在程序中使用基于Token的身份验证

1.无状态、可扩展(负载均衡器能够将用户信息从一个服务传到其他服务器上)

2.支持移动设备(CORS<跨域资源共享>)

3.跨程序调用(栗子:能够创建与其它程序共享权限的程序,授权给第三方应用程序)

4.安全(防止防止CSRF<跨站请求伪造>)


基于服务器验证方式暴露的一些问题:

1.Seesion,内存:认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。

2.可扩展性:在服务端的内存中使用Seesion存储登录信息,伴随而来的是可扩展性问题。

3.CORS(跨域资源共享):当让数据跨平台使用时,跨域资源的共享是一个问题,使用Ajax抓取另一个域的资源,会出现禁止请求的情况。

4.CSRF(跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站。


基于Token的身份验证的过程如下:

1、用户通过用户名和密码发送请求。

2、程序验证。

3、程序返回一个签名的token 给客户端。

4、客户端储存token,

5、客户端每次发送请求都携带Token到服务器端。

6、服务器端采用filter过滤器校验,校验成功则返回请求数据,校验失败则返回错误码。


实现思路:


token是有时效的,一段时间之后用户需要重新验证。我们也不一定需要等到token自动失效,token有撤回的操作。

浏览器的缓存方式 :


           名称                      生命周期          数据大小          与服务器通信                     用途

cookie      由服务器生成可设置失效时间     4KB           每次会携带在HTTP头中   存储过多会带来性能问题
                                                                                                                               标识用户身份

sessionStorage      关闭页面或者浏览器     5MB          仅在客户端保存                 浏览器缓存数据
                               后被清除                                        不参与服务端通信     

localStorage          手动清除                       5MB           仅在客户端保存               浏览器缓存数据
                              否则永久有效                                   不参与服务端通信

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容