前端設(shè)置cookie 如何用cookie實(shí)現(xiàn)自動(dòng)登錄?
如何用cookie實(shí)現(xiàn)自動(dòng)登錄?謝謝?!氨3值卿洜顟B(tài)”表示服務(wù)器需要一些數(shù)據(jù)來標(biāo)識(shí)發(fā)起當(dāng)前請(qǐng)求的用戶。例如,登錄時(shí),后端生成會(huì)話ID并將其設(shè)置為cookie。所有后續(xù)的請(qǐng)求瀏覽器都會(huì)帶來cookie,
如何用cookie實(shí)現(xiàn)自動(dòng)登錄?
謝謝。
“保持登錄狀態(tài)”表示服務(wù)器需要一些數(shù)據(jù)來標(biāo)識(shí)發(fā)起當(dāng)前請(qǐng)求的用戶。例如,登錄時(shí),后端生成會(huì)話ID并將其設(shè)置為cookie。所有后續(xù)的請(qǐng)求瀏覽器都會(huì)帶來cookie,然后服務(wù)器從cookie中獲取會(huì)話ID并查詢用戶信息。
因此,保持登錄的關(guān)鍵不是cookie,而是通過cookie保存和傳輸?shù)臅?huì)話ID。它的本質(zhì)是能夠獲取用戶信息的數(shù)據(jù)。除了cookie之外,HTTP請(qǐng)求頭通常用于傳輸,例如標(biāo)準(zhǔn)授權(quán),或者自定義的,例如x-auth-sessionid。但是,這個(gè)請(qǐng)求頭不會(huì)像cookie一樣由瀏覽器自動(dòng)攜帶,需要手動(dòng)處理。
例如,登錄時(shí),服務(wù)器返回JWT格式的訪問令牌,前端將其保存到localstorage。對(duì)于后續(xù)請(qǐng)求,將構(gòu)造一個(gè)類似于
authorization:bearer<access token>
的請(qǐng)求頭。服務(wù)器從授權(quán)中獲取令牌,解碼并查詢相應(yīng)的用戶。最終結(jié)果與cookie相同。
假設(shè)我拿到了別的用戶的淘寶網(wǎng)站的cookie,我放到自己的http請(qǐng)求里,我就可以冒充這個(gè)用戶嗎?
理論上,如果你得到一個(gè)cookie,你就可以模擬一個(gè)用戶。根據(jù)以下具體分析:
此“身份密碼”由服務(wù)器生成并放置在客戶端瀏覽器的cookie中。服務(wù)器將有一個(gè)與之對(duì)應(yīng)的會(huì)話,會(huì)話ID也存儲(chǔ)在cookie中。
如上所述,服務(wù)器的會(huì)話ID存儲(chǔ)在客戶端的cookie中,以便其他用戶在cookie中獲得會(huì)話ID后,可以模擬原始用戶啟動(dòng)請(qǐng)求。
這似乎不合理
!但是,這是cookies和會(huì)話的機(jī)制。我們說過當(dāng)cookie被禁用后,session可能無法正常工作,但是我們可以通過get將sessionid傳遞給服務(wù)器,因此如果sessionid以明文形式傳輸,則存在安全風(fēng)險(xiǎn)。
由于cookie存儲(chǔ)在客戶機(jī)中并且不安全,因此當(dāng)我們將用戶數(shù)據(jù)存儲(chǔ)在cookie中時(shí),我們將對(duì)其進(jìn)行加密。例如,它將驗(yàn)證用戶的IP、終端身份等,即使其他用戶偽造Cookie,也無法驗(yàn)證。