1. 程式人生 > >儲存會話資料的兩種技術之一Session

儲存會話資料的兩種技術之一Session

上一篇部落格中提到了儲存會話資料的技術之一的Cookie。它的特點是將資料儲存在客戶端,那麼有沒有一個技術是將資料儲存在伺服器端呢,答案是肯定的。這種技術就是這篇部落格將要介紹的session。

1. 出現背景

        在上一篇部落格中提到cookie的出現背景是為了解決HTTP協議的無狀態性而出現的技術,在這裡session也是一樣的。我們希望實現web的動態互動,但是基於的HTTP協議卻是無狀態的,這裡就出現了一個難題:一個無狀態的協議怎樣才能關聯兩次連續的請求呢?也就是說無狀態的協議怎樣才能滿足有狀態的需求呢?此時有狀態是必然趨勢而協議的無狀態性也是木已成舟,因此我們需要一些方案來解決這個矛盾,來保持HTTP連線狀態,於是出現了cookie和session。

2.session工作原理

       最上面提到session的作用就是:將使用者資料儲存在伺服器端,使得使用者能夠訪問到自己的資料而不會使得許多使用者的資料混亂。那麼如何實現呢,下面就來介紹一些session的工作原理。

                
       客戶端(圖中的張三,李四)和伺服器連線上之後在伺服器端開闢一塊屬於自己的記憶體空間,空間建立成功之後馬上斷開和伺服器的聯絡.這樣子不同的客戶端就在伺服器中有了只屬於自己的一塊空間;

      下面馬上出現了另外一個問題:如何客戶端在下次訪問的時候如何找到屬於自己的那塊記憶體空間?為了解決這個問題就引入了一個sessionid(id我們都知道,總是做為我們的一個唯一性標識而出現的).sessionid就是作為一個每個客戶端的唯一標識而存在在伺服器端和客戶端的.也就是說在客戶端和伺服器端都存在一個sessionid.這樣子通過sessionid就互動了。

      其實客戶端的sessionid如果存放在cookie中就可能出現另外一個問題,在客戶端禁用了cookies就得不到sessionid,這樣子就完不成和伺服器端的通訊了。這個問題也有對應的解決方法即是url重寫;這裡先不說呢。

       嘮叨完這些就會發現其實session可以簡單的理解為是客戶端(瀏覽器)在伺服器上為自己開闢的一塊空間。

3.session的特點

1.伺服器的一塊記憶體,儲存資訊到伺服器端。

2.和客戶端視窗對應

3.客戶端和伺服器都有對應的sessionid

4.session和cookies的區別

對於兩者之間的聯絡在標題中其實已經給出了,兩個都是儲存會話的技術。那麼兩者之間的區別呢?

1.Cookie是把使用者的資料寫給使用者的瀏覽器。將資料儲存在客戶端

2.Session技術把使用者的資料寫到使用者獨佔的session中。將資料儲存在伺服器端。

3.Session物件由伺服器建立,開發人員可以呼叫request物件的getSession方法得到session物件。

5.總結

        Session是伺服器端技術,利用這個技術,伺服器在執行時可以為每一個使用者的瀏覽器建立一個其獨享的session物件,由於session為使用者瀏覽器獨享,所以使用者在訪問伺服器的web資源時,可以把各自的資料放在各自的session中,當用戶再去訪問伺服器中的其它web資源時,其它web資源再從使用者各自的session中取出資料為使用者服務。