我認爲的session好像不是這麼這樣的,koa中使用session,

我依稀記得又一次面試的經歷,他先讓我說出對 cookie和session的區別是啥?
我作爲初級前端菜鳥肯定就是
cookie 是由服務器端生成 保存在客戶端,可以用來存儲信息
session 是由於服務器端成,保存在服務器端的,
說完了 面試官問我,還有什麼要補充的嗎?
然後面試官會意一笑,你說下 session是關閉標籤後失效還是關閉瀏覽器後失效。
我當時想這麼簡單,session是會話肯定就是用戶關閉瀏覽器就失效了哈
然後當我信心滿滿的答上來之後,收到的是下去之後在瞭解瞭解。
本來想反駁的,想想還是算了。因爲面試還得繼續。本來想着面完之後問下呢,沒想到問完之後人家就直接走了。
好了,扯得有點遠了哈,迴歸正題哈 koa中使用session
這裏我使用了一個第三方中間件 koa-session
第一步安裝 npm install koa-session --save
// 引入 並配置中間件

var session = require('koa-session');
app.keys = ['some secret hurr']; // cookie 簽名
const CONFIG = {
	key: 'koa.sess', /** 默認 */
	maxAge: 100000,// 過期時間
	overwrite: true, /** 可以重寫嗎 */
	httpOnly: true, /** 僅僅是服務器端能訪問 */
	rolling: false, /** 每次訪問都更新session */
	renew: true, /**  默認 session 快要過期的時候 重新設置*/
  };
  app.use(session(CONFIG, app));

設置和使用 session

router.get('/',async ctx=>{
	console.log(ctx.session.userInfo); 
	ctx.body="獲取session";
})
router.get("/login",async ctx=>{
	ctx.session.userInfo="張三";
	ctx.body="登錄成功!"
})

然後我在本地測試了下分爲以下幾種情況
1.在不設置maxAge的時候 關閉瀏覽器 再次進入是無法訪問到session的
2.設置maxAge之後 在它沒有過期的範圍內 不管是關閉瀏覽器還是關閉標籤都可以訪問到 。
其實吧 服務器端生成一個session 會在客戶端有一個 sessIonID的東西
每次訪問服務器他就會比對這個sessionID和服務器上的session 進行比對
就好比一個鎖和鑰匙的關係似得。
你看到的雖然是同一個值,當時當你關閉瀏覽器後,之前的那個鑰匙就失效了,
再次訪問,服務器會給你一個新的鑰匙,讓你去打開服務器端的這個鎖。
此seesion並不是之前的那個session 雖然數值一樣哈

但是 當你關閉瀏覽器之後 服務器端的session還沒有失效

renew: true 這個配置還是很重要的 默認是false
當用戶在前臺無操作的 過一段時間session就會自動過期,用戶再操作的時候就會跳轉到登錄頁面
所以只要,再快過期的時候,用戶操作了一下就會重新計時。

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