有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

会话在Java中被覆盖

我面临一个奇怪的问题:

我有一个带有电子邮件字段的页面,当我提交该页面时,控件会转到一个servlet,在该servlet中,我使用

request.getSession().setAttribute("email_Value", request.getParameter("email_Value"));

现在,在这个电子邮件值的基础上,我查找数据库并提取该用户的信息,如果找到信息,则通过

request.getSession().removeAttribute("email_Value");

如果没有,则将请求重定向到同一页面,并显示一条错误消息和我正在使用从会话中提取的预填充电子邮件值

if(null!= request.getSession().getAttribute("email_Value")){
            String Email = (String)(request.getSession().getAttribute("email_Value"));
            request.getSession().removeAttribute("email_Value");            
    }

它在我们的DELEOPTION、UAT环境中运行良好,但问题只出现在我们有负载平衡器的PROD上

问题是,当返回到同一页面时,它会更改电子邮件地址字段,其中包含一些我甚至没有在我的机器上输入的不同电子邮件值,即它正在访问其他人会话

有人能提供一些解决这个问题的建议吗。由于这是生产问题,任何帮助都将不胜感激

谢谢


共 (3) 个答案

  1. # 1 楼答案

    看起来你需要使用粘性会话。这必须在apache中配置

  2. # 2 楼答案

    如果您的应用程序部署在多台服务器上,您的会话可能会在服务器之间传输。此外,在这种情况下,如果要在会话中存储任何对象,它们必须实现Serializable接口。如果没有,那么当会话被迁移时,数据将不会被持久化

    此外,这一环节似乎与另一环节互换。您是否在应用程序级别存储任何内容? 我还建议你调查一下你的案子

  3. # 3 楼答案

    Http是一种stateless协议,意思是服务器在一段时间内不知道如何识别客户机。 当客户端调用服务器(负载平衡,比如服务器1和服务器2)时,它可以到达server_1server_2,假设请求到达server_1,现在code创建一个session并将email添加到会话中。 当同一个客户端对服务器进行另一次调用时,这次它点击server_2,处于server_1会话中的emailserver_2不可用,并且server_2可能来自另一个session地址,这就是您看到另一个email地址的原因。 希望一切都清楚

    Solution:

    1. URL重写
    2. 饼干