java web開發——session簡介

如果有寫的不對的地方,歡迎評論指正,相互學習相互進步,謝謝!

因為一直做的都是java後端,對於這些偏前端的知識有點模糊,昨天面試的時候被問到session的工作原理,一臉懵逼,今天整理一下。


一、什麼是session

session是一次瀏覽器和伺服器交互的會話,在jsp中,作為一個內置對象存在。我的理解,就是當用戶打開網頁時,程序會在瀏覽器中開闢一段空間來存儲作為session的存儲,可以對一些用戶信息進行保存。session就是一個會話級別的cokkie,外加伺服器內存中的一組散列表。當關閉瀏覽器時,cookie會消失,session也就消失了,這個cookie不寫在磁碟上,而是寫在瀏覽器的緩存中。

Advertisements


二、session和cookie的區別

  1. cookie數據存放在客戶的瀏覽器中,session數據放在伺服器上

  2. cookie不是很安全,別人可以輕易的獲取本地的cookie並獲取相關信息進行欺詐

  3. session有時間限制,會在設置的一定時間內保存到伺服器上。

  4. cookie有限制,單個為3k,一個站點在客戶端存放的cookie不能超過3k

所以一般將登陸的用戶信息保存到session上,以防被盜,如果是其他信息,可以放在cookie裡面,如果考慮到伺服器的性能,減輕壓力,應該使用cookie


三、session的工作原理

伺服器和瀏覽器採用的是http無狀態的通訊,那麼如果多客戶對伺服器進行訪問的話,伺服器怎麼區分呢,那就是使用session。在session的機制中,有一個session_id,作為一個獨一無二的標識,來對客戶端進行區分。每次瀏覽器請求的時候,就會帶上這個標識。這個標識由伺服器生成。

Advertisements

簡述一下工作的流程:

  1. 當瀏覽器訪問伺服器時,伺服器根據需求設置session,並將會話的信息保存在伺服器上,並將標誌著session的session_id傳遞給瀏覽器。

  2. 瀏覽器會將收到的session_id保存在內存中,這個便是無過期時間的cookie,當瀏覽器關閉時,cookie會被清理,同理session_id也就沒有了。

  3. 當每次瀏覽器訪問伺服器的時候,都會帶上這個session_id,伺服器根據這個id獲取瀏覽器的狀態返回數據。

  4. session有一個超時時間,當瀏覽器因為一些原因被關閉的時候,伺服器端的session不會馬上被釋放,只要我們知道session_id,一樣可以獲取到伺服器端的應用數據。一般會給伺服器端的session設置一個過期時間,保證了數據的安全性。


總結:

正常的web中的C/S模式下,在兩端都會保存session,兩者通過一個唯一的session_id相關聯。client端的session保存在cookie中,當關閉瀏覽器的時候,cookie清空,session也同樣沒有了。server端的session保存在內存中,在client端關閉后,還會存在一段時間,到達超時時間后,生命周期完成被回收。在被回收前的這個過程中,只要知道這個唯一的session_id,就可以獲取到session中存儲的信息。

如上圖:紅框內的就是session_id

應用:

大部分的web開發,session都用來保存用戶的登錄狀態以及用戶名密碼等信息

Advertisements

你可能會喜歡