【W(wǎng)EB】淺談網(wǎng)站開發(fā)瀏覽器中的 Session 和 Cookie
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
為什么我們要討論 Session 和 Cookie?想象一下,我們?nèi)粘J褂玫木哂小皶?huì)員登錄”或者“網(wǎng)上購物”功能的網(wǎng)站,服務(wù)器需要識(shí)別這些不同的請(qǐng)求是否來自同一個(gè)客戶端。但是在 HTTP 設(shè)計(jì)中,每個(gè)請(qǐng)求都是相互獨(dú)立的,即使是同一個(gè)用戶連續(xù)操作瀏覽器發(fā)送多個(gè)請(qǐng)求,前一個(gè)請(qǐng)求也不會(huì)認(rèn)識(shí)后一個(gè)請(qǐng)求。因此,開發(fā)者需要利用 Session 和 Cookie 機(jī)制來幫助服務(wù)器識(shí)別特定的客戶端。 餐館和顧客在討論技術(shù)內(nèi)容之前,我們先來聊聊你附近的餐館。餐館和消費(fèi)者的關(guān)系就像 Session 和 Cookie 一樣。你每次去餐館消費(fèi)都是獨(dú)立的事件,交易完成后,老板通常不會(huì)記得你上次點(diǎn)了什么。但是,假設(shè)你是老板,你希望記住每位客戶的購買記錄,讓他們一進(jìn)門,你就能知道他們的喜好,你會(huì)怎么做呢?答案就是會(huì)員卡! 通過每一張獨(dú)一無二的會(huì)員卡,用會(huì)員編號(hào)綁定每一位消費(fèi)者,當(dāng)客戶上門時(shí),只需要出示卡片,你就能從客戶管理系統(tǒng)中調(diào)出該會(huì)員過往所有的消費(fèi)記錄。而這個(gè)“會(huì)員編號(hào)”,就相當(dāng)于網(wǎng)絡(luò)世界中的session id。 什么是 SessionSession就像是你的會(huì)員編號(hào),當(dāng)你需要追蹤同一個(gè)用戶通過瀏覽器發(fā)出的一系列請(qǐng)求時(shí),可以通過創(chuàng)建一組憑證來記錄設(shè)備間的交互過程,這種機(jī)制稱為Session。就像餐飲店通過會(huì)員編號(hào)查找顧客的歷史購買信息一樣,服務(wù)器也會(huì)通過 session id查找到對(duì)應(yīng)的用戶數(shù)據(jù)。 什么是 CookieCookie 就像是你手中的會(huì)員卡,卡片上有客戶的專屬會(huì)員編號(hào),也就是 session id。Cookie 是瀏覽器內(nèi)置的功能,通過這個(gè)功能,瀏覽器讓服務(wù)器能夠把 session 的信息(包括 session id)保存在瀏覽器的 Cookie 上。當(dāng)瀏覽器每次向服務(wù)器發(fā)送請(qǐng)求時(shí),都會(huì)附帶一組 Cookie 信息,因此,服務(wù)器就能通過 Cookie 中的 session id 追蹤到瀏覽器那頭的用戶是誰。 Session 與 Cookie 如何運(yùn)作?我們通過用戶登錄的案例來進(jìn)一步討論這兩者是如何運(yùn)作的。開發(fā)者會(huì)使用 session 與 cookie 來實(shí)現(xiàn)用戶認(rèn)證系統(tǒng)。無論是登錄微博還是淘寶,即便關(guān)閉了窗口又重新回到這些網(wǎng)站,我們通常不需要重新登錄,但如果換了一臺(tái)電腦,或者使用“無痕模式”操作,就必須重新登錄。 我們把登錄這個(gè)動(dòng)作拆分成“如何登錄”和“登錄后發(fā)生了什么”來討論。 用戶如何登錄?以淘寶為例,當(dāng)我們?cè)诘卿涰撁孑斎胗脩裘螂娫捥?hào)碼時(shí),你所輸入的數(shù)據(jù)就會(huì)被傳送到淘寶的服務(wù)器,驗(yàn)證此賬號(hào)是否存在。如果賬號(hào)通過驗(yàn)證,下一步你需要輸入賬號(hào)密碼進(jìn)行登錄,然后服務(wù)器會(huì)驗(yàn)證你輸入的數(shù)據(jù)是否與用戶數(shù)據(jù)庫的內(nèi)容一致。最后,如果判定結(jié)果為用戶數(shù)據(jù)一致的話,你就能成功登錄了! 登錄后瀏覽器與服務(wù)器如何交互?在你成功登錄的時(shí)候,也就是瀏覽器對(duì)服務(wù)器發(fā)送第一次請(qǐng)求時(shí),服務(wù)器端會(huì)建立一個(gè) session,并在你的瀏覽器 cookie 里存儲(chǔ)一個(gè) session id 變量。以后服務(wù)器通過這個(gè) session id 就知道你曾經(jīng)成功登錄過,而之后瀏覽時(shí)就能通過 cookie 里的 session id 直接對(duì)應(yīng)服務(wù)器上的 session 數(shù)據(jù),直接尋找有關(guān)你的數(shù)據(jù),后續(xù)就不需要你重新登錄了。 Session 會(huì)失效嗎?你可能會(huì)想,如果我把瀏覽器關(guān)掉,session 是不是就會(huì)失效了?;蛘哒f,有時(shí)候明明也沒有退出登錄,但系統(tǒng)又要求我再次登錄,這究竟是怎么一回事? 如果用“會(huì)員卡”的比喻來解釋,“關(guān)掉瀏覽器”就像把會(huì)員卡放回錢包里一樣,會(huì)員記錄還是會(huì)在。因此,要取消 session,一般來說有三個(gè)方法:
結(jié)語通過本次的學(xué)習(xí)分享,我們不僅對(duì)于 Cookie 與 Session 有了更進(jìn)一步的認(rèn)識(shí),也知道它們?nèi)绾螏椭_發(fā)者完成用戶認(rèn)證系統(tǒng)。特別是這些過程都是生活中不會(huì)留意到的小細(xì)節(jié),也充滿了許多的學(xué)問,我相信這就是網(wǎng)絡(luò)世界有趣的地方吧。 該文章在 2024/3/30 13:25:59 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |