最近做畢設需要在nodejs服務器下記錄當前用戶賬號,所用的node框架是koa,所以相對應配套的用了koa-session,發現和之前學的session差不多,都是會話級別的。
一、session和token的區別
1、session鑒權流程
(1)用戶登錄的時候,服務端生成一個會話和一個id標識
(2)會話id在客戶端和服務端之間通過cookie進行傳輸
(3)服務端通過會話id可以獲取到會話相關的信息,然后對客戶端的請求進行響應;如果找不到有效的會話,那么認為用戶是未登陸狀態
(4)會話會有過期時間,也可以通過一些操作(比如登出)來主動刪除
2、token鑒權流程
(1)用戶登錄的時候,服務端生成一個token返回給客戶端
(2)客戶端后續的請求都帶上這個token
(3)服務端解析token獲取用戶信息,並響應用戶的請求
(4)token會有過期時間,客戶端登出的時候也會廢棄token,但是服務端不需要任何操作
3、兩者區別
(1)session要求服務端存儲信息,並且根據id能夠檢索,而token不需要。在大規模系統中,對每個請求都檢索會話信息可能是一個復雜和耗時的過程。但另外一方面服務端要通過token來解析用戶身份也需要定義好相應的協議。
(2)session一般通過cookie來交互,而token方式更加靈活,可以是cookie,也可以是其他header,也可以放在請求的內容中。不使用cookie可以帶來跨域上的便利性。
(3)token的生成方式更加多樣化,可以由第三方服務來提供
二、koa-session 使用方法
(1)首先在node環境下安裝koa-session
npm install --save koa-session
(2)在app.js文件下引入koa-session
const session = require('koa-session');
(3)初始化koa-session
1 app.keys = ['some secret hurr']; 2 const CONFIG = { 3 key: 'koa:sess', 4 maxAge: 86400000, //失效時間,默認是一天。
5 overwrite: true, 6 httpOnly: true, //表示是否可以通過javascript來修改,設成true會更加安全
7 signed: true, //這個涉及到cookie的安全性
8 rolling: false, //是涉及到cookie有效期的更新策略
9 renew: false, //是涉及到cookie有效期的更新策略
10 }; 11 app.use(session(CONFIG, app));
(4)在登錄成功后記錄當前賬號
ctx.session.id = req_data.id; //設置session id
token和session的區別參考簡書地址:https://www.jianshu.com/p/8f4cc45d712e