2013-03-20 62 views

回答

0

由於問題沒有明確說這之間的會話需要共享的對象,我可以建議以下選項:

1)如果您需要在同一臺服務器上共享不同Web應用程序之間的會話(Tomcat)的,您可以使用:

<Host name="localhost" ...> 
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 
</Host> 

2)如果服務器不是tomcat,請參考相應服務器的SSO選項。 3)您也可以使用完全成熟的SSO產品,如CAS(http://www.jasig.org/cas),這將允許您跨應用程序在不同服務器之間但不在用戶之間共享會話。 4)如果你需要在不同的用戶之間共享會話,你需要做的就是根據你的共享標準在不同的客戶端(通常是瀏覽器)之間傳遞會話ID,比如玩同一個遊戲的人,訪問同一個公告板並可以協作地改變數據。但是,請理解大部分安全基礎結構是圍繞會話ID映射構建的。如果您選擇在多個用戶之間顯式訪問會話ID,則必須自己重新創建大量安全篩選器。

5)或者,最好的方法是以不同於會話的方式管理對象的狀態。共享對象的狀態可以在多個會話中以更符合標準的安全和可審計的方式共享。

+0

我知道SSO只是避免多次登錄到同一個安全領域,它不會共享會話。根據定義,JEE標準指定會話在Web應用程序之間是隔離的,但Websphere具有用於啓用會話共享的非標準配置。 – 2013-03-20 22:58:56

0

在Java EE上,您必須查看Servlet規範,對象HttpSession提供用於管理服務器端會話的行爲。

http://docs.oracle.com/javaee/5/tutorial/doc/bnagm.html

雖然可以存儲在會話中的任何物體,這種做法可能是危險的,因爲對象保持會話直到它過期或對象被刪除,所以如果你的程序沒有管好對象存儲在會話中的消息可以消耗到許多堆內存中。

會話的對象在到期時被刪除,到期時間在部署描述符web.xml中配置或可由客戶端設置。如果您未指定會話過期時間,則默認值爲30分鐘,這30分鐘是從用戶最後一次請求開始計算的。

我的建議是,你不會在會話中存儲對象,你必須使用對象HttpServletRequest和mehtos的setAttribute和getAttribute作爲請求之間的傳遞對象。我需要在會話中存儲價值,您可以存儲產品的ID而不是整個產品。會話的一個常見用途是存儲變量,它們必須超出請求才能存活,並且出於安全原因,您不希望將其存儲在cock中。

+0

感謝您的回覆,但似乎你的答案不是我的問題的答案,你只是添加一些關於使用會話的評論/實踐,我想。 – 2013-03-20 06:09:35

+0

你能對你的問題更具體嗎? – 2013-03-20 06:29:02