大神應(yīng)用session登錄文章點(diǎn)擊直達(dá)
一、Koa-Session簡單介紹
session是另一種記錄客戶狀態(tài)的機(jī)制,不同的是Cookie保存在客戶端瀏覽器中,而session保存在服務(wù)器上。
二、Session的工作流程
當(dāng)瀏覽器訪問服務(wù)器并發(fā)送第一次請求時(shí),服務(wù)器端會創(chuàng)建一個(gè)session對象,生成一個(gè)類似于key,value的鍵值對, 然后將key(cookie)返回到瀏覽器(客戶)端,瀏覽器下次再訪問時(shí),攜帶key(cookie),找到對應(yīng)的session(value)。 客戶的信息都保存在session中
三、koa-session的使用:
1.安裝 koa-session
npm install koa-session --save
2.引入express-session
const session = require('koa-session');
3.設(shè)置官方文檔提供的中間件
const session_signed_key = ["some secret hurr"]; // 這個(gè)是配合signed屬性的簽名key
const session_config = {
key: 'koa:sess', /** cookie的key。 (默認(rèn)是 koa:sess) */
maxAge: 4000, /** session 過期時(shí)間,以毫秒ms為單位計(jì)算 。*/
autoCommit: true, /** 自動提交到響應(yīng)頭。(默認(rèn)是 true) */
overwrite: true, /** 是否允許重寫 。(默認(rèn)是 true) */
httpOnly: true, /** 是否設(shè)置HttpOnly,如果在Cookie中設(shè)置了"HttpOnly"屬性,那么通過程序(JS腳本、Applet等)將無法讀取到Cookie信息,這樣能有效的防止XSS攻擊。 (默認(rèn) true) */
signed: true, /** 是否簽名。(默認(rèn)是 true) */
rolling: true, /** 是否每次響應(yīng)時(shí)刷新Session的有效期。(默認(rèn)是 false) */
renew: false, /** 是否在Session快過期時(shí)刷新Session的有效期。(默認(rèn)是 false) */
};
我們需要關(guān)注這幾個(gè)配置:
renew rolling
這兩個(gè)都可以在用戶訪問的過程中刷新有效期,不至于讓用戶訪問過程中Session過期成為未登錄狀態(tài)signed
這個(gè)是對客戶端Cookie的簽名,也就是用一個(gè)特點(diǎn)的字符加密,保證客戶端Cookie不會被偽造出來httpOnly
打開這個(gè)使得通過程序(JS腳本、Applet等)無法讀取Cookie,大大提高了安全性maxAge
以ms為單位的過期時(shí)間
4.使用
設(shè)置值 ctx.session.username = "張三";
獲取值 ctx.session.username
四、Koa中Cookie和Session區(qū)別
1、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙
考慮到安全應(yīng)當(dāng)使用session。
3、session會在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會比較占用你服務(wù)器的性能
考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。
4、單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。