一塊小餅乾 Cookie 的故事 下篇

2021-09-14 01:51:14 字數 3412 閱讀 3303

上篇介紹了註冊的基本流程,下篇簡單的講講登入的流程以及cookie的出現
當你在瀏覽器的輸入框裡輸入localhost:8080/sign_in的時候,會發起get請求,去訪問sign_in.html

if (path === '/sign_up' && method === 'get')
css布局與上篇的布局基本一樣,略去不表~

依然是上篇的套路,獲得使用者formdata後,分析資料,和資料庫裡面的比對

不同的是引入了乙個header,也就是今天的主角--cookie其實這和平常上網的情形類似的,有時候我們訪問一些購物**,並沒有登入,但是你在購物車裡面新增東西了,當你逛了以後再回來的時候,發現購物車裡面有你的記錄,幫你做這個事的也是cookie。

因為

http協議是無狀態的,即

伺服器不知道使用者上一次做了什麼,這嚴重阻礙了

互動式web應用程式的實現。在典型的網上購物場景中,使用者瀏覽了幾個頁面,買了一盒餅乾和兩瓶飲料。最後結帳時,由於http的無狀態性,不通過額外的手段,伺服器並不知道使用者到底買了什麼,所以cookie就是用來繞開http的無狀態性的「額外手段」之一。伺服器可以設定或讀取cookies中包含資訊,藉此維護使用者跟伺服器

會話)中的狀態。

可以看出,當你在sign_in發起get請求並設定了set-cookie之後,其他的同源的頁面,又都會帶上cookie,也就能保證同源的網頁向伺服器發起請求的時候,伺服器能夠明白,你己經是登入的使用者了,與那些沒有拿到cookie的頁面區別開來。

為什麼要在cookie裡面寫上httponly呢,因為這個可以防止有些牛人使用js修改cookie的內容。

寫了httponly之後將無法修改

這個是chrome的功能,用於分析cookie的

每一部分的作用詳見這裡

通過上述的例子,可以總結幾點重要的特點

伺服器通過 set-cookie 響應頭設定 cookie

瀏覽器得到 cookie 之後,每次請求都要帶上 cookie

伺服器讀取 cookie 就知道登入使用者的資訊(email)

當然了,還有幾個問題需要解答一下。

cookie 存在哪

存在硬碟的乙個檔案裡面

cookie會被使用者篡改嗎?

可以,也就是說它並不安全的。

cookie 有效期嗎?

預設有效期20分鐘左右,不同瀏覽器策略不同

後端可以強制設定有效期

set-cookie: =; expires=set-cookie: =; max-age=
具體語法看 set-cookie

既然你成功登入,理應跳轉到首頁,並顯示相應的介面。

$.post('/sign_in', hash)

.then((response) => ,

(request) =>

)

然後首頁的資訊應該根據使用者資訊做出相應的變化

let cookies = request.headers.cookie.split('; ') //['email=..@..', 'a=1']

let hash = {}

cookies.foreach((cookie) => )

let email = hash.sign_in_email

let users = fs.readfilesync('./db/users', 'utf8')

users = json.parse(users)

let founduser

for (let i = 0; i < users.length; i++)

}if (founduser) else

這裡的**邏輯與上篇的基本一致,唯一的不同在於第一行**

let cookies = request.headers.cookie.split('; ') //['email=..@..', 'a=1']

為什麼用字元來分割呢,這是因為可以有多個cookie

一般來說常見的作用有如下兩個:

識別使用者的身份。當使用者a去訪問localhost:8080的時候,伺服器會給a乙個獨一無二的id=00a(這就是cookie),當使用者a訪問localhost:8080的其他網頁的時候,都會帶著那個獨一無二的id。當b使用者來訪問localhost:8080的時候,伺服器發現他沒有任何標識,也會給他乙個獨一無二的id=00b,所以借助cookie伺服器端就能夠分清楚誰是誰了。

記錄你的瀏覽歷史。最常見的需求就是你去逛購物**,你新增到購物車裡面的東西過幾天一定會在,而不會憑空消失了。例如a使用者去taobao.com去買點東西,新增了乙個熱水壺、一部小公尺手機到購物車裡面,那麼伺服器端可以改寫你上面的cookie使之具體化「id=00a; cart=a1,a2」,表示你購物車裡面買了倆東西。你過幾天想起來了,去購物車裡面看,熱水壺、小公尺手機還在裡面。瀏覽器並不會刪除你存到硬碟上的cookie。

接下來可以去搞一搞其他的,像什麼sessionlocalstorage……(@ο@) 哇~

**鏈結sign_in.html

server.js

linux下,如何掛載一塊硬碟?

1首先先在虛擬機器上新增一塊硬碟。2.開啟虛擬機器收輸入fdisk l 將,系統中所有的分割槽都列出來。當輸入fdisk l 顯示的結果為如下圖所示的時候 上圖說明此時是因為使用的普通使用者沒有許可權造成的所以使用管理員root則不會顯示上圖的文字。額外新增的內容 2017 09 17 3.輸入fd...

在linux下新增一塊硬碟的操作

一 安裝硬碟到物理機上 確保硬碟已安裝 二 檢視硬碟是否正確安裝。使用 fdisk l 命令檢視硬碟代號。fdisk l 三 將硬碟分割槽。1 當硬碟小於等於2t時,可以用fdisk。fdisk dev sdb 1 檢視幫助。輸入 m 2 新建分割槽。輸入 n 3 建立邏輯分割槽 輸入 p 4 輸入...

在linux下新增一塊新硬碟

由於在redhat 6之前,系統中沒有硬碟管理工具 disk utility 需要使用命令來進行掛載硬碟操作。如果你的系統比較新,系統會自動執行掛載,但如果你想diy的話,掌握一點命令是必須的。這些操作磁碟的命令不建議新手來操作,造成的後果可想而知!如果必須要執行的話,現在你本地的虛擬機器裡面先實驗...