weblogic通過代理插件weblogic.servlet.proxy.HttpProxyServlet跨域訪問導致session丟失問題的解決

轉自:http://ribbonchen.blog.163.com/blog/static/1183165052011074500877/


之前配置了weblogic通過代理插件weblogic.servlet.proxy.HttpProxyServlet進行代理轉發,實際部署發現代理服務器把第一次請求轉發後,服務器端的session丟失,第二次轉發請求時重新開始了新的session,導致用戶登出無法繼續進行操作。

參照了網上的一些資料,開始時我認爲是http header中p3p設置的問題,具體參見http://www.neatstudio.com/show-1390-1.shtml
鼓搗後發現不行,於是另找出路。
重新溫習了一遍cookie和session的相關基礎知識,原來session在服務器端生成後分配的sessionID在客戶端的保存方式是個cookie,它的生命週期在瀏覽器關閉後就會結束,而這個cookie的名字如果不特別設置,weblogic會以默認的名稱“JSESSIONID”來設置這個cookie的名稱,我兩個應用的的session cookie名字都沒有設置,客戶端在第一次通過應用A請求代理轉發到應用B時,應用B返回的同名session cookie覆蓋了客戶端原本的應用A的session cookie,所以導致了應用A session的丟失。
解決方法是,在應用B的weblogic.xml中的session descriptor標記中添加session cookie的名稱設置,使其區別於A應用的session cookie名稱,如:
<?xml version="1.0"?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<session-descriptor>
<cookie-name>MYSESSION</cookie-name>
</session-descriptor>
</weblogic-web-app>

回過頭來看,發現之前鼓搗的http header p3p其實是在已經設好了session cookie的名稱的前提下,解決在iframe中進行跨域訪問時session丟失的問題。

另外,還有一些資料是說可以設置weblogic的session複製,如在weblogic.xml中:

<session-descriptor>

       <session-param>

              <param-name>PersistentStoreType</param-name>

              <param-value>replicated</param-value>

       </session-param>

</session-descriptor>

其實這是在weblogic集羣環境中才能起作用,對代理插件weblogic.servlet.proxy.HttpProxyServlet不起作用。


發佈了39 篇原創文章 · 獲贊 7 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章