我一直在使用Cookie在會話間共享非敏感數據。我想在用戶註銷事件中存儲當前會話的一些lastUsedEntity(字符串文字),以便可以在下次登錄會話時讀取/使用該實體。該實體屬於我的應用程序的會話bean。如何在下一個會話中使用從舊會話保存的數據?
我決定將這個實體提取並存儲在會話bean的@PreDestroy
方法中。該方法在應用程序的會話超時中成功運行。但是存儲cookie失敗,因爲FacesContext.getCurrentInstance()
在@PreDestroy
方法中爲空,可能是因爲JSF生命週期請求 - 響應週期完成。我嘗試緩存FacesContext.getCurrentInstance()
在@PostContruct
我的會話bean的方法,以便我可以訪問面臨上下文緩存實例,但後來我面臨另一個問題java.lang.IllegalStateException at com.sun.faces.context.FacesContextImpl.assertNotReleased,因爲我使用FacesContext作爲我的會話作用域類的實例變量。如果我能夠在這裏獲得一些頭像或者其他更好的想法,以便堅持我的舊會話數據以便在這種情況下進一步使用,我將不勝感激。
以前我一直在按照你說的去做,在每個頁面加載(或請求)上設置cookie。我在一個多頁面的應用程序工作。每個頁面都有自己的ID。一個頁面在註銷時重定向到登錄頁面。在每個ViewScoped頁面上登陸後,我一直在用'PostConstruct'方法中的一個名爲'lastOpenedId'的鍵設置cookie。此ID來自會話範圍的服務bean。但是我不得不改變它,因爲我的實際需求是存儲'lastExpiredId',而不是由於會話超時而必須跟蹤登出的頁面的id。 – user2918640
將其存儲在數據庫中。 – BalusC
這就是我一直在想的最後一招,除非我能想出一些可以在網頁框架層面完成的事情。 – user2918640