Session:在計算機中,尤其是在網絡應用中,稱為“會話控制”。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當用戶請求來自應用程序的 Web 頁時,如果該用戶還沒有會話,則 Web 服務器將自動創建一個 Session 對象。
當會話過期或被放棄后,服務器將終止該會話。Session 對象最常見的一個用法就是存儲用戶的首選項。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲在 Session 對象中。有關使用 Session 對象的詳細信息,請參閱“ASP 應用程序”部分的“管理會話”。注意 會話狀態僅在支持 cookie 的瀏覽器中保留。
session使用方法
Session 是 用于保持狀態的基于 Web服務器的方法。Session 允許通過將對象存儲在 Web服務器的內存中在整個用戶會話過程中保持任何對象。
Session 通常用于執行以下操作
存儲需要在整個用戶會話過程中保持其狀態的信息,例如登錄信息或用戶瀏覽 Web應用程序時需要的其它信息。
存儲只需要在頁重新加載過程中或按功能分組的一組頁之間保持其狀態的對象。
Session 的作用就是它在 Web服務器上保持用戶的狀態信息供在任何時間從任何設備上的頁面進行訪問。因為瀏覽器不需要存儲任何這種信息,所以可以使用任何瀏覽器,即使是像 Pad 或手機這樣的瀏覽器設備。
持久性方法的限制
隨著越來越多用戶登錄,Session 所需要的服務器內存量也會不斷增加。
訪問 Web應用程序的每個用戶都生成一個單獨的 Session 對象。每個 Session 對象的持續時間是用戶訪問的時間加上不活動的時間。
如果每個 Session 中保持許多對象,并且許多用戶同時使用 Web應用程序(創建許多 Session),則用于 Session 持久性的服務器內存量可能會很大,從而影響了可伸縮性。
Session 工作原理
1、創建Session
當用戶訪問到一個服務器,如果服務器啟用Session,服務器就要為該用戶創建一個SESSION,在創建這個SESSION的時候,服務器首先檢查這個用戶發來的請求里是否包含了一個SESSION ID,如果包含了一個SESSION ID則說明之前該用戶已經登陸過并為此用戶創建過SESSION,那服務器就按照這個SESSION ID把這個SESSION在服務器的內存中查找出來(如果查找不到,就有可能為他新創建一個),如果客戶端請求里不包含有SESSION ID,則為該客戶端創建一個SESSION并生成一個與此SESSION相關的SESSION ID。這個SESSION ID是唯一的、不重復的、不容易找到規律的字符串,這個SESSION ID將被在本次響應中返回到客戶端保存,而保存這個SESSION ID的正是COOKIE,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。
2、使用Session
我們知道在IE中,我們可以在工具的Internet選項中把Cookie禁止,那么會不會出現把客戶端的Cookie禁止了,那么SESSIONID就無法再用了呢?找了一些資料說明,可以有其他機制在COOKIE被禁止時仍然能夠把Session id傳遞回服務器。
經常被使用的一種技術叫做URL重寫,就是把Session id直接附加在URL路徑的后面一種是作為URL路徑的附加信息,表現形式為:
http://…。/xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;
另一種是作為查詢字符串附加在URL后面,表現形式為:
http://…。。/xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
還有一種就是表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把Session id傳遞回服務器。
Session作用
Session的根本作用就是在服務端存儲用戶和服務器會話的一些信息。典型的應用有:
1、判斷用戶是否登錄。
2、購物車功能。
Session實例問題
現有系統A,B; 假設A系統是可以獨立運行的web系統,即可以和瀏覽器直接處理session, B系統是基于mobile的,需要調用A系統的功能接口,
在保持A不改變的情況下,即登陸驗證,session存儲都不變的情況下,B系統能處理前端用戶的請求。
這里提供的方案是使用PHP實現
在用戶登陸成功后,將保存的session的session-id返回給B系統,然后B系統每次請求其他接口都帶session_id。
A系統在session_start前加上session_id(session_id);
這樣B系統就能安全的調用A
評論
查看更多