1. 程式人生 > >weblogic下同域不同埠下的跨域問題解決-設定session

weblogic下同域不同埠下的跨域問題解決-設定session

參考資料 
1 關於WebLogic的Session丟失的問題 
http://blog.csdn.net/DesignLife/article/details/2552186
2 tomcat向weblogic移植出現的問題系列 - session丟失問題 
(其中一位網友回答不知是什麼意思,要加什麼檔案) 
http://netliving.iteye.com/blog/148485
3 java weblogic session 丟失 
http://hi.baidu.com/leftstone/blog/item/3b34a4a19d4d0588471064f0.html
4 weblogic兩個domain中jsp相互呼叫session丟失解決方法 

http://www.4ucode.com/Study/Topic/1159787
5 關於WebLogic的Session丟失的問題 
http://hi.baidu.com/goylsf/blog/item/d2446677d71e070ab051b98d.html
6 weblogic通過代理外掛weblogic.servlet.proxy.HttpProxyServlet跨域訪問導致session丟失問題的解決 
http://ribbonchen.blog.163.com/blog/static/1183165052011074500877/
7 WebLogic如何設定session超時時間 
http://tonyaction.blog.51cto.com/227462/201900

注意網上有很多的Webloigc不是最新的配置
位於WEB-INF/WebLogic.xml配置如下: 
Java程式碼  收藏程式碼
  1. <?xml version='1.0' encoding='utf-8'?>   
  2. <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"   
  3.                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.                  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
      
  5.                  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd    
  6.                  http://www.bea.com/ns/weblogic/90    
  7.                  http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">   
  8.     <container-descriptor>  
  9.         <prefer-web-inf-classes>true</prefer-web-inf-classes>  
  10.     </container-descriptor>  
  11.     <context-root>/</context-root>  
  12.     <session-descriptor>  
  13.         <!--WebLogic設定Session超時時間,在web.xml中去掉session超時設定  -->  
  14.         <!-- <timeout-secs>7200</timeout-secs> -->  
  15.         <cookie-name>JSESSIONID1</cookie-name>  
  16.     </session-descriptor>  
  17. </weblogic-web-app>  

一 WebLogic設定Session超時
1 web.xml 
設定WEB應用程式描述符web.xml裡的<session-timeout>元素。這個值以分鐘為 
單位,並覆蓋weblogic.xml中的TimeoutSecs屬性 
Java程式碼  收藏程式碼
  1. <session-config>  
  2.     <session-timeout>30</session-timeout>  
  3. </session-config>  

此例表示Session將在30分鐘後過期 
當<session-timeout>設定為-2,表示將使用在weblogic.xml中設定的 
TimeoutSecs這個屬性值。 
當<session-timeout>設定為-1,表示Session將永不過期,而忽略在 
weblogic.xml中設定的TimeoutSecs屬性值
。 
該屬性值可以通過console控制檯來設定 
在weblgoic的console中:xxDomain->Servers->xxServer->Protocols->HTTP 中有一個關於Post Timeout的配置,但這個引數一般使用預設值即可 
一般是通過Services-->JDBC-->Connection Pools-->MyConnection(你所建立的連線池名)-->Configration-->Connections 裡的Inactive Connection Timeout這個引數來設定的,預設的為0,表示連線時間無限長。你可以設一個時間值,連線超過這個時間值,它會把連線強制放回連線池 
Java程式碼  收藏程式碼
  1. <Server AcceptBacklog="62" CompleteHTTPMessageTimeout="480"  
  2. CompleteMessageTimeout="480" IdleC  
  3. ListenAddress="" ListenPort="7001" Name="myserver"  
  4. NativeIOEnabled="true" ReliableDeliveryPolicy="RMDefaultPolicy"  
  5. ServerVersion="8.1.4.0">  

是否IdleConnectionTimeout引數
2 weblogic.xml 
設定WebLogic特有部署描述符weblogic.xml的<session-descriptor>元素的 
TimeoutSecs屬性。這個值以秒為單位 
Java程式碼  收藏程式碼
  1. <session-descriptor>  
  2.         <!--WebLogic設定Session超時時間,在web.xml中去掉session超時設定  -->  
  3.        <timeout-secs>7200</timeout-secs>          
  4. </session-descriptor>  


二 防止Webloigic下的iframe的Session失效
請在Weblogic.xml新增如下程式碼 
Java程式碼  收藏程式碼
  1. <session-descriptor>      
  2.         <cookie-name>JSESSIONID1</cookie-name>  
  3. </session-descriptor>  

原來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名稱.其中的cookie-name可以重新命名!解決在iframe中進行跨域訪問時session丟失的問題