開始一個koa2 -(4)-session

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章