session是另一種記錄客戶狀態的機制,不同的是Cookie保存在客戶端瀏覽器中,而session保存在服務器上。
cookie的鏈接: 開始一個koa2 --3--cookie存儲數據
1.工作流程:
- 用戶登錄,後臺生成一個會話session對象(key,value鍵值對),session對象保存在數據庫中;
- 向前端發送key,前端通過cookie保存key;
- 前端每次與後臺通信時都發送key,後臺通過key檢索會話相關的信息,以此響應前端;
- 但是如果找不到有效的會話,那麼認爲用戶是未登陸狀態;
- 會話會有過期時間,也可以通過一些操作(比如登出)來主動刪除
2.安裝:
koa2 原生功能只提供了cookie的操作,但是沒有提供session操作.需要安裝第三方中間件;
- koa-session-minimal 適用於koa2 的session中間件,提供存儲介質的讀寫接口 。
- koa-mysql-session 爲koa-session-minimal中間件提供MySQL數據庫的session數據讀寫操作。
- 將sessionId的數據存到數據庫
npm install koa-mysql-session koa-session-minimal --save
const session = require('koa-session-minimal')
const MysqlSession = require('koa-mysql-session')
let store=new MysqlSession(config.mysql_config);
// 使用session中間件
app.use(session({
key: 'SESSION_ID',
store: store,
cookie: cookie
}))
app.use( async ( ctx ) => {
// 設置session
if ( ctx.url === '/set' ) {
ctx.session = {
user_id: Math.random().toString(36).substr(2),
count: 0
}
ctx.body = ctx.session
} else if ( ctx.url === '/' ) {
// 讀取session信息
ctx.session.count = ctx.session.count + 1
ctx.body = ctx.session
}
})
第一次訪問;
首次建立會話,只有response headers中有cookie.
第二次訪問;
瀏覽器顯示 {"count":1}
第二次建立會話,request headers中也有cookie
服務器中生成了一個表;
Koa中Cookie和Session區別
1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
考慮到安全應當使用session。
3、session會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能
考慮到減輕服務器性能方面,應當使用COOKIE。
4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。