1. 程式人生 > >HttpSession原理及Session衝突

HttpSession原理及Session衝突

一、摘要

        本文討論了web伺服器靠session id識別客戶端。以及透過原理分析session衝突的原因,發現session衝突的原因是儲存session id資訊的cookie發生了衝突。

        以下說到的Session特指Web應用下的Session會話。

二、Session原理

1、什麼是Session

        Session是一個服務端會話技術,利用這個技術,伺服器能夠識別與之通訊的客戶端。該客戶端與服務端互動過程中,一些資訊可以儲存在Session中。

2、Session實現原理

        Web伺服器對瀏覽器的識別是建立在Cookie上面的,Session由服務端生成,其token(也就是session id)會儲存在瀏覽器上。具體的客戶端識別流程如下:

                                                                                    (圖1:Web伺服器識別瀏覽器流程)

        當用戶使用瀏覽器訪問web服務時,web服務會查詢記憶體中是否有對應的session物件,如果有,則通過session id可以找到,如果沒有,則web服務會為瀏覽器建立一個session物件,並生成session id。session id會返回到瀏覽器上使用cookie儲存起來,瀏覽器下次請求的時候把該cookie帶上則可以被web服務識別了。

三、Session衝突出現原因及解決

1、Session衝突出現原因

        在瀏覽器中,cookie的儲存是以域名進行劃分的,如:

        domain a:

               token1=xx;

               token2=xx;

        doamin b:

               token1=xx;

               token2=xx;

        因此,如果存在兩個web應用使用同一個域名,不同埠進行訪問,剛好cookie的Key值也相同,其cookie就會出現衝突,如果這個cookie儲存的是session資訊,則session就會出現衝突。

2、Session衝突如何解決

        從前面的分析可以看出,要避免session衝突,關鍵是避免cookie衝突,如果一定要使用相同的域名,則可以重新定義儲存session id資訊的cookie的key值。

        在tomcat中,可以在配置檔案中修改Context標籤,新增cookieSessionName屬性,即<Context cookieSessionName=”xx”>,則可以重新定義該應用session對應的cookie key值。

        如果使用其它的web server,也可以自行搜尋相關的配置修改方法,總之關鍵在於避免cookie衝突

四、總結

        整篇文章的討論是圍繞著儲存session id資訊的cookie展開的,伺服器只要能夠識別session id則能夠找到對應的session。session衝突的根源在於瀏覽器儲存的cookie的衝突,要解決session衝突的思路是重新定義cookie的key值,避免cookie衝突。