2011-04-13 56 views
0

我正在做一個多用戶登錄應用程序,我使用session來存儲用戶對象。Struts2中HttpSession的問題

HttpSession session = request.getSession(true); 
    session.setAttribute("user",user); 

我在使用JSTL檢查每個頁面中是否存在用戶對象。

<c:choose> 
    <c:when test="${not empty sessionScope.user}"> 
    //jsp code 
    </c:when> 
    <c:otherwise> 
    <logic:redirect forward="welcome"/> 
    </c:otherwise> 
</c:choose> 

我的問題是,如果用戶點擊應用程序中的href鏈接,用戶將更改爲會話中的上一個用戶。即它從緩存中加載用戶。如果我刷新頁面,它將加載正確的用戶。

我該如何解決?

+0

您使用的是哪個版本的Struts?這看起來更像Struts 1.x. – 2011-04-13 12:17:43

+0

我用struts2。感謝您的關注。 – TanNM 2011-04-13 15:56:14

回答

1

如果您使用的是Struts2,那麼在Interceptor中進行檢查可能更有意義,而不是在每個JSP中重複該代碼。

http://struts.apache.org/2.0.11/docs/interceptors.html

+0

請幫助我,因爲攔截器不能修復我的錯誤!上一個用戶仍在會話攔截器中。 – TanNM 2011-04-14 05:08:24

0

內特是正確的,這是一個攔截器最好的處理。這answer可能對你有用。

編輯

這聽起來像這可能是一個頁面緩存的問題,然後。嘗試在Java代碼中設置斷點,以便可以檢查會話中用戶對象的內容。假設用戶對象始終正確,並且只是顯示錯誤信息的頁面,請嘗試將no-cache標頭設置爲detailed here

+0

感謝您的回覆。我在你的鏈接中使用了一個Interceptor,但是我想在jsp頁面中獲取用戶,解決方案如何? – TanNM 2011-04-14 03:35:20

+0

$ {sessionScope.user}應該假定用戶對象在會話中是「user」。邏輯標籤不會工作,這是來自Struts 1. – 2011-04-14 04:10:26

+0

請幫助我,因爲攔截器不能修復我的錯誤!上一個用戶仍在會話攔截器中。 – TanNM 2011-04-14 05:07:23