2013-06-28 73 views
1

我有一個自定義控件放置在我的網站的選定頁面上。控件在頁面加載事件之前會調用java代碼來檢查用戶密碼是否在eDirectory中過期。如果密碼過期,則自定義控件將用戶重新命名爲用戶可以更改其密碼的密碼更改屏幕。使用範圍變量,實際檢查每個會話只運行一次。在Firefox中緩存/重定向問題?

所有的作品在IE中都很棒。在FireFox中,正確檢測到過期密碼,並且密碼更改屏幕顯示正確。但是,如果用戶試圖返回到觸發密碼更改的頁面,那麼它們將轉到密碼更改屏幕。

它似乎是指導他們到密碼更改屏幕的browswer,因爲當java代碼運行時,我會將很多診斷消息打印到日誌中。無論我多次嘗試訪問請求的頁面,我都只能看到日誌中密碼的初始檢查。在理論上,每當我被帶到頁面時,我都會在日誌中看到多個入口。

只要頁面從未觸發過密碼更改,我就可以毫無問題地進入該頁面。但是,如果確實觸發了更改,那麼我將無法再進入該頁面,因爲它會將我帶到密碼更改屏幕。

如果我清除FirFox中的緩存,那麼所有的工作都很好,直到下一次更改密碼。

是什麼讓這個問題更令人沮喪的是,它只出現在我們的reverese代理服務器上。我們有一個apacahe反向代理,允許外部我們的瀏覽器訪問我們的網站。反向代理服務器連接到一個負載平衡器服務器,並連接到兩臺Domonio服務器中的一臺。

任何想法如何解決這個非常奇怪的緩存問題?

這是在Before Page Load事件中運行的代碼。

var pwdExpired:boolean = sessionScope.get("pwdExpired"); 

if (pwdExpired == null) 
{ 
var ldap:com.pnc.cld.LDAPauthentication = new com.pnc.cld.LDAPauthentication(); 
if (ldap.isPasswordExpired(@Name("[CN]",@UserName()))) 
{ 
    sessionScope.put("pwdExpired",true); 
    var extCont = facesContext.getExternalContext(); 
    extCont.redirect(getURI("xp_pgChangePwd.xsp")); 


} 
else 
    sessionScope.put("pwdExpired",false); 

} 
+0

好像有很多在Firefox怪異的問題。我之前有一個關於http://stackoverflow.com/questions/16610593/links-clicks-not-working-in-firefox-after-using-the-back-button-on-an-xpage的問題,也許這是與還有緩存,即使它不應該保持超時變量。 –

+0

當用戶更改密碼時,您是否將sessionScope變量設置爲null?似乎對我來說是合乎邏輯的錯誤。考慮將變量更改爲viewScope。 –

+0

你正在向你的XPages添加什麼http Header/Meta標籤? –

回答

0

斯文的建議至少似乎已經解決了這個問題。據報道,這個問題也發生在IE9中。我不確定這個解決方案是否能解決這個問題,因爲我還沒有測試它。

這裏是我固定的問題:

var extCont = facesContext.getExternalContext(); 
var response = extCont.getResponse(); 

response.setHeader("Cache-Control", "no-cache"); 
response.setHeader("Cache-Control", "no-store");