具體到Web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。因此從上述的定義中我們可以看到,Session實際上是壹個特定的時間概念。
需要註意的是,壹個Session的概念需要包括特定的客戶端,特定的服務器端以及不中斷的操作時間。A用戶和C服務器建立連接時所處的Session同B用戶和C服務器中建立連接時所處的Sessions是兩個不同的Session。
那什麽是Session的解決方案呢?我們知道,用戶訪問壹個網站時往往需要瀏覽許多網頁。對於壹個通過PHP構築的網站來說,用戶在訪問的過程中需要執行許多的PHP腳本。然而由於HTTP協議自身的特點,用戶每執行壹個PHP腳本都需要和Web服務器重新建立連接。
又由於無狀態記憶的特點,此次連接無法得到上次連接的狀態。這樣,用戶在壹個PHP腳本中對壹個變量進行了賦值操作,而在另外壹個PHP腳本中卻無法得到這個變量的值。例如,用戶在負責登錄的PHP腳本中設置了$user="wind",卻無法在另壹個PHP腳本中通過調用$user來獲得“wind”這個值。也就是說,在PHP中無法設置全局變量。每個PHP腳本中所定義的變量都是只在這個腳本內有效的局部變量。
Session解決方案,就是要提供在PHP腳本中定義全局變量的方法,使得這個全局變量在同壹個Session中對於所有的PHP腳本都有效。上面我們提到了,Session不是壹個簡單的時間概念,壹個Session中還包括了特定的用戶和服務器。因此更詳細地講,在壹個Session定義的全局變量的作用範圍,是指這個Session所對應的用戶所訪問的所有PHP。
例如A用戶通過Session定義了壹個全局變量$user=“wind”中,而B用戶通過Session定義的全局變量$user=“jane”。那麽在A用戶所訪問的PHP腳本中,$user的值就是wind。
在ASP 和 ASP.NET 中
Session 是 用於保持狀態的基於 Web 服務器的方法。Session 允許通過將對象存儲在 Web 服務器的內存中在整個用戶會話過程中保持任何對象。
Session 通常用於執行以下操作:
存儲需要在整個用戶會話過程中保持其狀態的信息,例如登錄信息或用戶瀏覽 Web 應用程序時需要的其它信息。
存儲只需要在頁重新加載過程中或按功能分組的壹組頁之間保持其狀態的對象。
Session 的作用就是它在 Web 服務器上保持用戶的狀態信息供在任何時間從任何頁訪問。因為瀏覽器不需要存儲任何這種信息,所以可以使用任何瀏覽器,即使是像 PDA 或手機這樣的瀏覽器設備。
此持久性方法的限制
隨著越來越多用戶登錄,Session 所需要的服務器內存量也會不斷增加。
訪問 Web 應用程序的每個用戶都生成壹個單獨的 Session 對象。每個 Session 對象的持續時間是用戶訪問的時間加上不活動的時間。
如果每個 Session 中保持許多對象,並且許多用戶同時使用 Web 應用程序(創建許多 Session),則用於 Session 持久性的服務器內存量可能會很大,從而影響了可伸縮性。 .