【问题标题】:Session is getting overwritten in Java会话在 Java 中被覆盖
【发布时间】:2014-07-23 14:21:42
【问题描述】:

我遇到了一个奇怪的问题:

当我提交页面时,我有一个包含电子邮件字段的页面,控件转到一个 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");            
    }

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

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

有人可以提供任何指针来解决此问题。由于这是生产问题,我们将不胜感激。

谢谢

【问题讨论】:

  • This 可以帮到你

标签: java session


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Httpstateless 协议含义,服务器不知道在一段时间内识别客户端。 当客户端调用服务器(负载平衡,例如 server_1 和 server_2)时,它可以到达 server_1server_2,假设请求到达 server_1,现在您的 code 创建一个 session并将email 添加到会话中。 当同一个客户端再次调用服务器时,这一次它命中server_2server_1 会话中的emailserver_2server_2 不可用,server_2 可能有来自另一个@987654336 的email @这就是为什么你看到另一个email 地址。 希望清楚。

    Solution:

    1. 网址重写
    2. Cookie

    【讨论】:

    • 感谢您的回复,但在我们的应用程序中,我们还具有登录功能,其中整个用户 DTO 对象保存在会话中并访问从注册到登录或更新配置文件页面的值。我们在那里没有做任何不同的事情,但它仍然有效。你也认为任何通过引用或类似的东西都会导致问题。
    • 此外,如果我的请求到达服务器 2,那么理想情况下它不应该获得任何价值,事实上它应该是服务器 2 的新会话,但它正在从可能由其他人创建的会话中获取价值来自不同机器的用户。
    【解决方案3】:

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

    此外,会话似乎与另一个会话互换了。您是否在应用程序级别存储任何内容? 我还建议您查看 HttpSessionActivationListener 以了解您的情况。

    【讨论】:

    • 另外,请确保您没有在servlet 的实例变量中存储任何内容。一切都必须由局部变量来操作。
    • 您能否详细说明我需要如何以及在何处实现 Serializable 接口。
    • 所有作为属性放入会话中的用户定义对象都必须实现可序列化。我相信你的 UserDTO。
    • 我的做法一模一样,上面代码sn-p中已经提到过。您是否看到任何问题,或者您是否希望我首先初始化会话变量,例如 HttpSession session = request.getSession();然后设置属性。
    • 是的,我刚刚检查了 User DTO 对象实现了 Serializable,我可以为这个单个电子邮件字段做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2012-05-09
    相关资源
    最近更新 更多