Java 不同浏览器会话中相同用户帐户的相同JSF会话?

Java 不同浏览器会话中相同用户帐户的相同JSF会话?,java,jsf,session,jsf-2,jsf-2.2,Java,Jsf,Session,Jsf 2,Jsf 2.2,当我通过不同的浏览器以经过身份验证的用户身份对我的JSF应用程序进行身份验证时,JSF会为我维护不同的用户会话,即使我使用单个用户帐户进行身份验证 有没有办法避免这种情况&只要使用相同的用户帐户,服务器上的所有并发的不同浏览器会话都只使用一个会话实例 编辑: 如何将用户会话数据存储在应用程序范围内,以便它可以在不同的浏览器会话中更全局地可用&在会话范围内的bean上使用PreDestroy方法销毁应用程序范围内的用户会话数据,使其与@SessionScoped数据具有相同的生存期 我将在应用程序

当我通过不同的浏览器以经过身份验证的用户身份对我的JSF应用程序进行身份验证时,JSF会为我维护不同的用户会话,即使我使用单个用户帐户进行身份验证

有没有办法避免这种情况&只要使用相同的用户帐户,服务器上的所有并发的不同浏览器会话都只使用一个会话实例

编辑: 如何将用户会话数据存储在应用程序范围内,以便它可以在不同的浏览器会话中更全局地可用&在会话范围内的bean上使用PreDestroy方法销毁应用程序范围内的用户会话数据,使其与@SessionScoped数据具有相同的生存期


我将在应用程序范围内为我的应用程序的所有当前经过身份验证的用户维护一个映射。因此,它允许我在为用户创建会话时检查应用程序范围内是否已有实例可用。

否。不同的浏览器=>不同的会话。浏览器对彼此的cookie没有任何感知。

没有。不同的浏览器=>不同的会话。浏览器对彼此的Cookie没有任何感知。

也许您正在使用一些单例对象?请注意:如果您找到某种方法来做您想做的事情,请不要在地图中存储对会话的引用;在映射中存储对会话的WeakReference,这样服务器就可以自由地使用它,而无需您通过维护活动引用进行干预。也许您正在使用一些单例对象?请注意:如果您找到某种方法来执行您想要的操作,请不要在映射中存储对会话的引用;将会话的WeakReference存储在映射中,这样服务器就可以自由地使用它,而无需您通过维护活动引用进行干预。我理解这一点,但这不能在服务器级别完成吗?我的意思是,相同用户ID的用户会话可以是一个,我想这在JSF中是不容易配置的,所以我应该将经过身份验证的用户数据存储在app scope中,以便使用自定义的查找实现更全局地使用它&使用会话范围bean上的predestroy清除app scope中的会话数据,如问题编辑部分所建议的。我理解这一点,但这难道不能在服务器级别完成吗?我的意思是,相同用户ID的用户会话可能只有一个,我想这在JSF中是不容易配置的,所以我应该将经过身份验证的用户数据存储在app scope中,以便使用自定义的查找实现使其更全局可用&使用会话范围bean上的predestroy清除app scope中的会话数据,如问题编辑部分所建议的那样。