日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

你必须知道的session与cookie

發(fā)布時(shí)間:2025/3/11 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你必须知道的session与cookie 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Session本質(zhì)

提到Session我們能聯(lián)想到的就是用戶登錄功能,而本身我們使用Session的基礎(chǔ)是通過(guò)url進(jìn)行訪問(wèn)的,也就是使用http協(xié)議進(jìn)行訪問(wèn)的,而http協(xié)議本身是無(wú)狀態(tài)的,那么問(wèn)題來(lái)了服務(wù)器端是怎么驗(yàn)證客戶端身份的?

:服務(wù)器端和客戶端驗(yàn)證的聯(lián)系就是sessionid,登錄成功之后服務(wù)器會(huì)自動(dòng)給客戶端一個(gè)session標(biāo)識(shí)也就是sessionid,而sessionid會(huì)存儲(chǔ)到客戶端的cookie里面,每次請(qǐng)求的時(shí)候都會(huì)帶上這個(gè)標(biāo)識(shí),用來(lái)讓服務(wù)器端驗(yàn)證身份的。服務(wù)器端的sessionid一般是存儲(chǔ)在內(nèi)存中的,通過(guò)某種算法加密存儲(chǔ)到服務(wù)器上,客戶端就存儲(chǔ)到cookie里面,當(dāng)頁(yè)面關(guān)閉的時(shí)候客戶端的sessionid就會(huì)消失,而服務(wù)器端的session不會(huì)因?yàn)榭蛻舳说南ФP(guān)閉,而是通過(guò)他本身設(shè)置過(guò)期時(shí)間之后,才會(huì)失效。

總結(jié)來(lái)說(shuō),session本身就是通過(guò)存儲(chǔ)在客戶端的sessionid進(jìn)行身份驗(yàn)證。

那么問(wèn)題來(lái)了,如果客戶端的sessionid被讀取到,就可以偽裝身份,對(duì)系統(tǒng)進(jìn)行破壞了,這就是存儲(chǔ)型XSS了,那怎么來(lái)處理怎么問(wèn)題呢?這就是接下來(lái)要說(shuō)的Cookie了。

?

Cookie屬性HttpOnly

定義:如果cookie中設(shè)置了HttpOnly屬性,那么通過(guò)js腳本將無(wú)法讀取到cookie信息,這樣能有效的防止XSS攻擊,竊取cookie內(nèi)容,這樣就增加了cookie的安全性。

解釋:也就是說(shuō)服務(wù)器端設(shè)置了HttpOnly之后,客戶端是無(wú)法通過(guò)document.cookie獲取到cookie值了,這樣就有效的緩解了XSS攻擊。

服務(wù)器設(shè)置HttpOnly方法:

asp.net:

HttpCookie myCookie = new HttpCookie("myCookie"); myCookie.HttpOnly = true; Response.AppendCookie(myCookie);

express(nodejs):

res.cookie('rememberme', '1', {httpOnly: true });

然而,設(shè)置HttpOnly只能一定程度的阻止XSS,如果http在傳輸過(guò)程中被劫持了,該怎樣處理這個(gè)問(wèn)題呢?那就是接下來(lái)要說(shuō)的Cookie的另一個(gè)屬性Secure了。

?

Cookie屬性Secure

定義:當(dāng)Secure屬性設(shè)置為true時(shí),cookie只有在https協(xié)議下才能上傳到服務(wù)器,而在http協(xié)議下是沒(méi)法上傳的,所以也不會(huì)被竊聽(tīng)。

解釋:當(dāng)Secure=true時(shí),客戶端的Cookie是不會(huì)上傳到服務(wù)器端的(http協(xié)議)。

asp.net

HttpCookie myCookie = new HttpCookie("myCookie"); //... myCookie.SecurePolicy = CookieSecurePolicy.Always; Response.AppendCookie(myCookie);

express(nodejs)

var app = express() var sess = {secret: 'keyboard cat',cookie: {} }if (app.get('env') === 'production') {app.set('trust proxy', 1) // trust first proxysess.cookie.secure = true // serve secure cookies }app.use(session(sess))

參考資料:https://github.com/expressjs/session

?

末尾

到此,本文已到尾聲,主要介紹了Session的原理,以及Cookie兩個(gè)非常重要的安全屬性的設(shè)置(HttpOnly/Secure),能力有限,不足之處,歡迎各位斧正~

?

總結(jié)

以上是生活随笔為你收集整理的你必须知道的session与cookie的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。