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