Spring:model和session的區別

【通俗】

其實model和session都是存放信息的地方,不同的地方就是他們的生命週期不同,model是request級別的,session是一次會話,在服務器與一個用戶客戶端交互過程中一直保留。

即在用戶登錄一個網站後,session裏存放的用戶數據可以在該網站的其他頁面使用。

model的數據只能在該頁面使用。

【詳細】

【model】

Spring中數據模型除了Model外還有ModelMap、RedirectAttributesModelMap、ModelAndView。後端將數據注入model中,傳給前端取出。

Model、ModelMap、RedirectAttributesModelMap無需手動創建,作爲controller函數形參傳入即可,返回URL時Spring自動將模型對象傳到前端頁面,ModelAndView需要在controller函數中手動創建,然後返回一個ModelAndView對象(包含視圖和模型數據)。

幾者的梳理:https://blog.csdn.net/qq_37080070/article/details/104132155

Model、ModelMap、ModelAndView用法:https://blog.csdn.net/yongwa123/article/details/85017551

RedirectAttributesModelMap:https://blog.csdn.net/qq_41617848/article/details/105337533 

【session】

由於HTTP協議是無狀態的協議,所以服務端需要記錄用戶的狀態時,就需要用某種機制來識具體的用戶,這個機制就是Session。將 user agent 和 server 之間一對一的交互,抽象爲“會話”。

典型的場景比如購物車,當你點擊下單按鈕時,由於HTTP協議無狀態,所以並不知道是哪個用戶操作的,所以服務端要爲特定的用戶創建了特定的Session,用用於標識這個用戶,並且跟蹤用戶,這樣才知道購物車裏面有幾本書。

這個Session是保存在服務端的,有一個唯一標識。在服務端保存Session的方法很多,內存、數據庫、文件都有。集羣的時候也要考慮Session的轉移,在大型的網站,一般會有專門的Session服務器集羣,用來保存用戶會話,這個時候 Session 信息都是放在內存的,使用一些緩存服務比如Memcached之類的來放 Session。


思考一下服務端如何識別特定的客戶?這個時候Cookie就登場了。

每次HTTP請求的時候,客戶端都會發送相應的Cookie信息到服務端。實際上大多數的應用都是用 Cookie 來實現Session跟蹤的,第一次創建Session的時候,服務端會在HTTP協議中告訴客戶端,需要在 Cookie 裏面記錄一個Session ID,以後每次請求把這個會話ID發送到服務器,我就知道你是誰了。有人問,如果客戶端的瀏覽器禁用了 Cookie 怎麼辦?一般這種情況下,會使用一種叫做URL重寫的技術來進行會話跟蹤,即每次HTTP交互,URL後面都會被附加上一個諸如 sid=xxxxx 這樣的參數,服務端據此來識別用戶。


Cookie其實還可以用在一些方便用戶的場景下,設想你某次登陸過一個網站,下次登錄的時候不想再次輸入賬號了,怎麼辦?這個信息可以寫到Cookie裏面,訪問網站的時候,網站頁面的腳本可以讀取這個信息,就自動幫你把用戶名給填了,能夠方便一下用戶。這也是Cookie名稱的由來,給用戶的一點甜頭。

session 在服務器端,cookie 在客戶端(瀏覽器)。

session用來跟蹤會話,cookie目的可以跟蹤會話,也可以保存用戶喜好或者保存用戶名密碼。
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章