我一直在使用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