1. http協定的無狀态性
網站應用是基于http協定的,是基于請求和響應的應用,這種應用有一個特點:在完成一次用戶端與伺服器端的響應之後,用戶端與服務端就斷開了聯系,那麼也就是說服務端并不關心用戶端是誰,隻關心請求,請求來了就做出響應,響應結束用戶端與伺服器端就沒有聯系了,這個特點就是http協定的無狀态性
要實作真正的登入功能,就要将用戶端和伺服器端建立聯系,建立這種聯系就需要使用cookie和session技術
2. cookie和session
cookie:浏覽器在電腦硬碟中開辟的一塊空間,主要供伺服器端存儲資料
cookie特點:cookie中的資料會随着請求被自動發送到伺服器端
誰能在cookie中存儲資料呢?
用戶端js可以,伺服器端也可以,但實際上cookie出現的真正目的是為伺服器端存儲資料的,每一個網站都有自己的服務端,每一個網站都可以向cookie中存儲資料,是以cookie中的資料是以域名的形式進行區分的
- cookie中的資料是以域名的形式進行區分的
- cookie中的資料是有過期時間的,超過時間資料會被浏覽器自動删除
- cookie中的資料會随着請求被自動發送到伺服器的
- cookie的資料始終在同源的http請求中攜帶(即使不需要)
- cookie是在浏覽器與伺服器之間傳遞

圖解:
當用戶端第一次向伺服器端發送請求的時候,用戶端是沒有cookie的,當伺服器收到這個請求之後,并且要對用戶端做出響應的時候,在做出響應的同時,可以向用戶端的cookie當中存儲一些資料,當用戶端再一次通路伺服器端的時候,用戶端會自動把這個cookie攜帶給伺服器端
session
session實際上就是一個對象,存儲在伺服器端的記憶體中,在session對象中也可以存儲多條資料,每一條資料都有一個sessionid作為唯一的辨別。
3. cookie和session兩者如何聯系?
當用戶端向伺服器端發送請求時,并且郵箱位址和密碼作為請求資料,伺服器端接收到請求參數,并對請求參數做過驗證以後,證明用戶端傳遞過來的郵箱位址和密碼是正确的,說明 使用者是可以登入成功的,然後伺服器端需要使用session給目前登入的使用者生成一個唯一的sessionId,并且可以在session對象中存儲目前使用者的資訊,然後伺服器端需要将sessionId寫入到cookie當中發送給用戶端,當用戶端下一次通路伺服器端的時候,cookie會被自動發送到伺服器端,伺服器端拿到這個cookie當中存儲的sessionId,然後在伺服器端的session當中查找sessionId,能夠找到說明使用者是登陸過的,如果沒有則使用者是沒有登入過的,此時如果使用者是登入的狀态我們才能夠去響應隻有登入之後才能過擷取到的資料
4. session和cookie有什麼差別?
session是存儲在伺服器端的,cookie是存儲在用戶端的,是以session比cookie的安全性高
擷取session中的資訊是通過存儲在cookie中的sessionId來擷取的
session是存儲在伺服器的記憶體中的,如果session裡的資料不斷增加是會造成伺服器的負擔的,是以把重要的資訊存儲在session中,而把一些次要的資訊存儲在cookie中
session的資訊是存儲在伺服器端的,session的資料是通過sessionId來擷取的,而sessionId是存儲在cookie當中的,當浏覽器關閉時cookie消失,sessionId也就消失了,但是session的資訊還存在伺服器端
5. cookie、sessionstorage和localStorage的差別
sessionstorage: 用于臨時儲存同一視窗(或标簽頁)的資料,在關閉視窗或标簽頁之後将會删除這些資料。
localStorage: 在浏覽器視窗關閉後還保留資料, 除非手動删除
- sessionstorage 、localStorage不會自動把資料發送到服務端,都是存儲在本地中
- 資料有效期不同:
- sessionstorage隻在目前浏覽器視窗關閉之前有效
- localstorage中的資料始終有效,視窗或浏覽器關閉也一直儲存,是以用作持久資料,除非手動删除
- cookie隻在設定的過期時間之前有效,即使視窗或浏覽器關閉
- 作用域不同
- sessionstorage 不在不同的浏覽器視窗中共享,即使是同一個頁面
- localStorage在所有同源視窗中都是共享的
- cookie也是在所有同源視窗中都是共享的