cookie是儲存在本地終端的資料。cookie由伺服器生成,傳送給瀏覽器,瀏覽器把cookie以k-v形式儲存到某個目錄下的文字檔案內,下一次請求同一**時會把該cookie傳送給伺服器。由於cookie是存在客戶端上的,所以瀏覽器加入了一些限制確保cookie不會被惡意使用,同時不會佔據太多磁碟空間,所以每個域的cookie數量是有限的。
cookie的組成有:名稱(key)、值(value)、有效域(domain)、路徑(域的路徑,一般設定為全域性:"")、失效時間、安全標誌(指定後,cookie只有在使用ssl連線時才傳送到伺服器(https))。
當使用者第一次通過瀏覽器使用使用者名稱和密碼訪問伺服器時,伺服器會驗證使用者資料,驗證成功後在伺服器端寫入session資料,向客戶端瀏覽器返回sessionid,瀏覽器將sessionid儲存在cookie中,當使用者再次訪問伺服器時,會攜帶sessionid,伺服器會拿著sessionid從資料庫獲取session資料,然後進行使用者資訊查詢,查詢到,就會將查詢到的使用者資訊返回,從而實現狀態保持。建立session
;弊端:
token認證成功後,會對當前使用者資料進行加密,生成乙個加密字串token,返還給客戶端(伺服器端並不進行儲存)
瀏覽器會將接收到的token值儲存在local storage中,(通過js**寫入local storage,通過js獲取,並不會像cookie一樣自動攜帶)
再次訪問時伺服器端對token值的處理:伺服器對瀏覽器傳來的token值進行解密,解密完成後進行使用者資料的查詢,如果查詢成功,則通過認證,實現狀態保持,所以,即時有了多台伺服器,伺服器也只是做了token的解密和使用者資料的查詢,它不需要在服務端去保留使用者的認證資訊或者會話資訊,這就意味著基於token認證機制的應用不需要去考慮使用者在哪一台伺服器登入了,這就為應用的擴充套件提供了便利,解決了session擴充套件性的弊端。如何使用token:
該方法的缺點是客戶端需要帶裝置號/mac位址作為引數傳遞,而且伺服器端還需要儲存;優點是客戶端不需重新登入,只要登入一次以後一直可以使用,至於超時的問題是有伺服器這邊來處理,如何處理?若伺服器的token超時後,伺服器只需將客戶端傳遞的token向資料庫中查詢,同時並賦值給變數token,如此,token的超時又重新計時。
檢視方式:
netstat -n | awk '/^tcp/ end '
出現close_wait:在對方關閉連線之後伺服器程式自己沒有進一步發出ack訊號
出現time_wait:對於爬蟲伺服器或者web伺服器,每完成乙個爬取任務之後,他就會發起主動關閉連線,從而進入time_wait的狀態
參考:
工作中實際問題
1.資料庫分布式問題,session 問題 使用者登入時,需要產生乙個sessionid 來判斷是否為同一使用者。當跨服務訪問時,其他伺服器如何判斷該使用者是否已經登入?借用redis 技術。把 sessionid 作為乙個標記存入 redis 中,實現資料共享,讓多個伺服器共同呼叫。如何設定有效時...
用程式設計解決實際問題
在現實程式設計中,如果我們遇到了已經學過的演算法不適合解決的問題,該怎麼辦?其實很簡單,就是把控制流程和資料結構想清楚,然後用 實現就好了!在本章內我們就來看兩個例子。題目內容 這些錢及其理財收益僅僅用於你個人的日常生活消費 不買房 不買車 不置產,不用於大病 也不包括結婚生子的費用,只用來過日子。...
運用「孤獨九劍」解決專案實際問題(二)
筆者介紹 姜雪偉,it公司技術合夥人,it高階講師,csdn 社群專家,特邀編輯,暢銷書作者,國家專利發明人 已出版書籍 手把手教你 架構 3d遊戲引擎 電子工業出版社 和 unity3d 實戰核心技術詳解 電子工業出版社等。網際網路的估值模式,很重要的指標就是流量,包括註冊使用者數量 活躍使用者數...