我依稀記得又一次面試的經歷,他先讓我說出對 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就會自動過期,用戶再操作的時候就會跳轉到登錄頁面
所以只要,再快過期的時候,用戶操作了一下就會重新計時。