會話 (計算機科學)

半永久交互信息交换

計算機科學領域來說,尤其是在網絡領域,會話(英語:sessionMicrosoft Windows譯作工作階段連線階段)是一種持久網絡協議,在用戶端(或用戶代理)和服務器端之間建立關聯,從而起到交換數據包的作用機制,session在網絡協議(例如telnetFTP)中是非常重要的部分。

在不包含對談層(例如UDP)或者是無法長時間駐留對談層(例如HTTP)的傳輸協議中,對談的維持需要依靠在傳輸數據中的高級別程序。例如,在瀏覽器和遠程主機之間的HTTP傳輸中,HTTP cookie就會被用來包含一些相關的信息,例如session ID,參數和權限信息等。

軟件實現

TCP 會話通常是通過子進程和(或)多線程在軟件中實現的,當計算機建立或者加入一個會話時即創建一個新的進程或線程。HTTP 會話通常不會針對每個會話創建一個線程,而是由一個儲存每個會話狀態信息的數據庫實現的。使用多線程或者多進程的方式帶來的好處是降低了軟件的複雜度,因為每個線程或者進程都單獨具備自己的歷史信息並且封裝了變量。而這樣做的劣勢是帶來了大量系統資源的開銷,而且會話會因為系統的重啟而被打斷。

當客戶端在多個服務器調取數據時,保持對談狀態的一致性是需要注意的,客戶端需用同時保持和某一個主機的連接,或者多個服務器端需要共享一個儲存對談信息的文件系統或者數據庫。否則,當用戶在一個新的而不是一開始保存對談信息的主機上提交訪問請求的時候,主機會因為無法獲知原來主機的對談的訪問狀態而產生問題。

服務器端的會話

服務器端的對談是快速而高效的,但是在負載均衡系統和高速應用系統中的使用會比較麻煩,而在沒有儲存能力的系統上更是無法使用。在負載均衡系統中可以通過共享儲存或者設立獨立的存儲服務器來解決,這需要根據系統的效率和載入分布的需求情況。

使用緩存存儲對談數據是一種不需要儲存介質的解決方案。這種方式適合於處理少量數據的客戶端操作(例如路由或網絡橋接器對多個客戶端產生的請求)。但是這種方式會消耗較多內存空間。

客戶端的對談

客戶端對談使用了Cookie加密技術來完成上面提到的數據儲存需求。

服務器端對談和客戶端的協作

在動態頁面完成解析的時候,儲存在對談中的變量會被壓縮後傳輸給客戶端的Cookie。此時完全依靠客戶端的文件系統來保存這些數據(或者內存)。

在每一個成功的請求中,Cookie中都保存有服務器端用戶所具有的身份證明(如PHP中的session id)或者更為完整的數據。

雖然這樣的機制可以保存數據的前後關聯,但是必須要保障數據的完整性和安全性。