用户信息认证session和token

在进行用户信息认证之前,我们需要先知道两个知识点:

(1):http是无状态协议。所以,在进行信息认证时,我们需要引入状态机制,也就是session机制。

(2):cookie,与域名有关,域名不变,cookie不变。也就是说,在同一域名下,请求各种资源都会携带cookie回后端。

下面来谈谈两种认证方式:
1.session(会话)

这种方式依赖于cookie,我们也称它为setCookie(种cookie)。

原理:当前端发出一次请求时,后端产生一个session ID,后端自动通过response返还给前端,也就是setCookie,用户请求第二个页面时,浏览器自动通过request携带cookie到后端进行比较。

以下步骤为操作过程:

  • 安装express-session(yarn add express-session)

  • 配置session,一定要在路由之前配置。

    // session 配置,配置在路由之前
    app.use(session({
      secret: 'keyboard cat',
      resave: false,
      saveUninitialized: false,
      cookie: {
        httpOnly: true, 
        secure: false,
        maxAge: 24 * 60 * 60 * 1000
      }
    }))

  • 引入express-session后就直接有了session对象

扩展:

由此引出一个新的问题:登录不过期时,用户关闭浏览器再次打开,首页面依然保持登录状态。如何判断用户是否登陆过?以下提供两种解决方案:​

第一种:通过判断cookie(sessionID)是否存在。缺点:sessionID不携带用户信息。

第二种:再次请求后端API,判断req.session.username是否存在,返回给前端一个信息。
2. 生成token(基于jwt(jsonwebtoken)的认证机制)

(1)生成token

方法一:对称加密:SH256
方法二:非对称加密:RS256,私钥加密,公钥解密。(github的传输就是采用非对称加密)

(2)后端向前端传输数据的方式有四种:

  • get(在queryString中显示)

  • post(FormData中显示)

  • 通过自定义路由载荷一个对象

  • 设置响应头res.header

  要注意最后一种传输方式,前端接收时,如果采用jquery中ajax的success:(data,status,xhr)=>{}中的方法来获取response的头部信息会有坑,最好使用.then()方法。

(3)传递到前端,利用localstorage.setItem()存储token。token并不存储在服务器端,所以删除的时候要记得,从哪里存储,就在哪里删除。

(4)用户发起请求时,前端要想后端传递token,可使用jquery中$.ajax中的header配置。后端用req.header()取出token,进行验证,利用cert(签名)进行解密。

 

 

转载于:https://www.cnblogs.com/ruchang/p/9965919.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A:在Web开发中,cookie、sessiontoken都用于身份认证和保持用户状态,但它们的实现方式和具体用途不同。 1. cookie(HTTP cookie):是一种在客户端保存数据的机制,当用户访问网站时,服务器可以把需要保存的数据通过Set-Cookie响应头发送给客户端,浏览器会自动把这些数据保存在本地,之后每次请求时会把这些数据通过Cookie请求头发送给服务器。cookie本质上是一组键值对,可以保存一些用户登录状态、偏好设置等信息。 2. session:与cookie类似,也是一种保持用户状态的机制,但它的实现方式不同。session是在服务器端创建的,客户端通过一个session ID与服务端进行交互,服务端维护着session数据。通常情况下,session ID会保存在cookie或者URL参数中。Session通过在服务器端保存用户登录状态可以提高安全性,因为Cookie可能被第三方截获。 3. tokentoken是一种在客户端和服务端之间传递认证信息的机制,一般是由服务端签发的,包含了一些认证信息和有效期等内容。客户端在登录成功后,服务端会返回一个token给客户端,在后续的请求中,客户端需要携带该token才能进行认证token可以放在请求头、Cookie、URL参数等位置,具有跨域、跨平台等优势。相比于使用session,使用token能够将负载更多地分散到客户端。 总结:cookie是在客户端保存数据、session是在服务器端保存会话状态、token是一种通过客户端和服务器之间交互的证明身份机制。而且,它们在功能和使用方式上都存在着不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值