session与cookie
session与cookie的区别:
分 类 | cookie | session | token |
存储形式: | 存储在客户端 | 存储在服务器。 | token是用户身份的验证方式,我们通常叫它:令牌 |
结合使用 |
将session数据加密,然后存储在cookie中。 这种专业术语叫做client side session。flask采用的就是这种方式 |
通过cookie存储一个session_id,然后具体的数据则是保存在session中 如果用户已经登录,则服务器会在cookie中保存一个session_id, 下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。 |
Token的使用流程:
A:当用户首次登录成功(注册也是一种可以适用的场景)之后, 服务器端就会生成一个 token 值,这个值,会在服务器保存token值(保存在数据库中), 再将这个token值返回给客户端; B:客户端拿到 token 值之后,进行本地保存。 (SP存储是大家能够比较支持和易于理解操作的存储); C:当客户端再次发送网络请求(一般不是登录请求)的时候, 就会将这个 token 值附带到参数中发送给服务器; D:服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值做对比。 |
区 别: |
两种类型 *有生命周期 *无 生命周期 |
两种实现方式 *依赖于cookie *URL重写 |
Token的身份认证逻辑: 对比一:如果两个 token 值相同, 说明用户登录成功过!当前用户处于登录状态! 对比二:如果没有这个 token 值, 则说明没有登录成功; 对比三:如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录。 |
路径问题: | 客户端每次请求只发送当前路径下和“直系”关系的父路径的cookie(父路径的页面是不能访问子路径和兄弟路径的cookie的)
setcookie如果不设置路径,默认为当前页面的路径,父亲路径的页面是无法访问的 |
同一个session的窗口共享一个session |
Token的安全性我们可以保存认证过的Token记录在服务器上,来添加一个附加的安全层,然后在每一步验证Token的时候验证这个记录(比如每次客户端请求API时检查这个Token的合法性)。这将会阻止第三方伪装一个Token,也将会使得服务器可以失效一个Token。 |
典型应用: |
*三个月不用再登录 *购物车 |
*用户登录 *购物车也可以用session实现 |
|
安全性: | 可修改,不可靠 | 可靠 |