生活随笔
收集整理的這篇文章主要介紹了
node --- 实现session认证.
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
跨域認證的問題
互聯網服務離不開用戶認證.一般流程如下:
1、用戶向服務器發送用戶名和密碼。
2、服務器驗證通過后,在當前對話(session)里面保存相關數據,比如用戶角色、登錄時間等等。
3、服務器向用戶返回一個 session_id,寫入用戶的 Cookie。
4、用戶隨后的每一次請求,都會通過 Cookie,將 session_id 傳回服務器。
5、服務器收到 session_id,找到前期保存的數據,由此得知用戶的身份。
自己創建 Session
使用 session 空對象存 cookie 鍵值對.當第一次進入的時候,生成一個隨機數 sid,通過 cookie 傳遞 sid,并再后端使用session[sid] = msg的方式,記錄本次的值若非第一次進入,則需要從 cookie 中解析出 sid,進而得到該 sid 下的內容(有可能是用戶信息)
const session
= {}
http
.createServer((req
, res
) => {const sessionKey
= 'sid'if (req
.url
=== '/favicon.ico') {return} else {const cookie
= req
.headers
.cookie
if (cookie
&& cookie
.indexOf(sessionKey
) > -1) {res
.end('Come Back')console
.log('cookie:', cookie
)const pattern
= new RegExp(`${sessionKey}=([^;]+);?\S*`)const sid
= pattern
.exec(cookie
)[1]console
.log('session:', sid
, session
, session
[sid
])} else {const sid
= (Math
.random() * 9999999).toFixed()res
.setHeader('Set-Cookie', `${sessionKey} = ${sid}`)session
[sid
] = { name
: 'laowang' }res
.end('hello cookie')}}}).listen(3000)
瀏覽器首次訪問,會生成sid保存在服務器中,并將sid返回給瀏覽器;瀏覽器遇到Set-Cookie: 后把后面的內容放到,cookie中;再次訪問相同網址時,瀏覽器會把cookie獲取,傳遞給服務器;服務器根據sid進行認證,返回對應的結果
koa實現session
const koa
= require("koa");
const app
= new koa();const session
= require("koa-session");app
.keys
= ['marron'];const SESSION_CONFIG ={key
: 'marron rain',maxAge
: 86400000,httpOnly
: true,signed
: true
}app
.use(session(SESSION_CONFIG, app
));app
.use(ctx
=>{if(ctx
.path
=== '/favicon.ico') return;let n
= ctx
.session
.coung
|| 0;ctx
.cession
.count
= ++n
;ctx
.body
= `第${n}次訪問`;
});
app
.listen(3000);
signed:true: 對生成的Value進行hash算法,(把不定長的值)摘要出一個定長的字符串,并且具有血崩效應.摘要: 明文可以得出密文, 但是密文不能反編譯成明文. 且密文依賴于明文, 明文一改變, 密文發生翻天覆地的變化.這樣可以防篡改.血崩效應: 明文發生很小的變化,密文變化很大,這樣很難破譯加密的規則.常見的hash: SHA、MD5
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的node --- 实现session认证.的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。