当前位置: 首页 > 知识库问答 >
问题:

在两个war文件之间共享会话数据

蒋联
2023-03-14

我有两个war文件,比如war1和war2

如果am登录应用程序,会话将在war1中创建,如果am导航到war2,我需要相同的会话数据。

我在服务器的context.xml尝试了Cross Context=true,我可以通过将数据存储在servletContext中来访问数据。但问题是一旦我在chrome中登录屏幕,会话数据将存储在servletContext中,数据将保持到应用程序运行。

如果我在另一个浏览器(比如IE)中也给出了相同的URL,我可以获得servletContext数据,这样就不会导航到登录页面,而是会打开相应的屏幕

请建议我如何在java中克服这个问题?

有没有办法在java中找到浏览器切换或隐藏浏览器的窗口模式?注意:我使用的是tomcat服务器

共有2个答案

皮景龙
2023-03-14

虽然会话复制确实可以在Tomcat中完成(参见此处),但我建议您通过完全消除会话来避免此类问题。

这种会话复制是一种在大约15-10年前有点常见的方法,但现在当我们有很多服务器并行运行以服务用户请求并具有弹性集群时,这种方法还不够好,因为基本上它不能很好地扩展。

但是,有很多方法可以实现你想要的:

  1. 使用共享数据库存储会话信息。向响应添加一些会话Id并要求客户端将此id传回会话中的所有后续请求。然后通过此Id执行对数据库的查询并检索所有会话信息。这种解决方案也不能很好地扩展,但如果db允许,您可以对会话信息进行分片...
  2. 使用Redis/Aerospike保存当前连接用户的会话信息。有点像DB方法,但由于redis在内存中运行,它会快得多。通常,这种方法可以与1结合使用,其中redis是内存缓存。
  3. 加密会话信息,甚至只是加密签名并发回给客户端。客户端必须将此信息与请求一起提供,而不知道哪个服务器将实际服务于此请求。在不深入研究密码学的情况下,我只会声明,如果您不想让客户端看到会话信息(尽管这是提供信息的用户),可以进行加密,并且使用签名来防止回火数据(同时将其发送回服务器)。例如,可以通过Header或cookie将数据从客户端提供给服务器。
巫新知
2023-03-14

我从未处理过您的具体配置问题,但即使您可以在一个Tomcat实例上完成这项工作,如果您的两个web应用程序曾经分布在多个Tomcat实例上,您也可能会遇到问题。

因此,我建议您实际使用一个数据库来存储需要在两个应用程序之间以安全可靠的方式传递的状态。请注意,只要有一个逻辑数据库,数据库方法在分布式环境中也可以很好地扩展。

 类似资料:
  • 问题内容: 是否有使用节点,表达和redis / predis共享PHPSESSID的最新指南(或示例代码)? 我发现有1-2年的一些教程,它们都使用旧版本的Express或不使用Express。 Express cookie解析器也已弃用。 https://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share- redi/

  • 问题内容: 我需要在两个(或更多个)组合框之间共享数据,但是我想独立选择元素。例如,如果我在第一个comboBox中选择Object1,则我的第二个ComboBox也选择Object1,因为它们具有相同的模型(DefaultComboBoxModel,并且此模型还管理所选的对象)。但是我不想要这种行为。我想在我的comboBoxes中独立选择对象。当我在第一个comboBox中选择对象时,我的第二

  • 问题内容: 我目前在两个不同的端口上运行两个单独的节点应用程序,但是共享同一个后端数据存储。我需要在两个应用程序之间共享用户会话,以便当用户通过一个应用程序登录时,他们的会话可用,并且他们似乎登录了另一个应用程序。在这种情况下,它是面向公众的网站和管理后端。 我们的设置如下: 快速节点 护照正用于通过本地策略处理身份验证 我们正在使用connect-redis来允许我们通过Redis共享会话。 我

  • 我有一个简单的pojo,其中有一个字段: 现在,我使用两个不同的浏览器窗口(firefox和chrome)作为两个不同的用户登录到我的web应用程序。令我惊讶的是,当我从一个会话设置配额的值(使用)时,新的值将可用于另一个会话(当调用时)。我希望每个用户会话都有自己的bean实例;这不是spring中会话作用域bean的用途吗? 我一定错过了什么。可能是什么? 编辑: 实现类如下所示: 最后,这里

  • 在Java中,对于两个JVM(运行在同一台物理机器上),是否有办法使用/共享相同的内存地址空间?假设JVM-1中的生产者将消息放在特定的预定义内存位置,如果JVM-2上的消费者知道要查看哪个内存位置,那么它是否可以检索消息?

  • 我正在使用ActiveMQ客户端库将我的服务器应用程序连接到ActiveMQ。几个不同的消费者和生产者在单个线程中运行。、和之间的关系应该如何? 每个JVM一个连接工厂 每个JVM一个到代理的连接或n个连接,每个使用者一个 n个会话,每个消费者一个(Javadoc似乎强烈建议这样做)