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

从JSP到Servlet的会话丢失(Cookie更改)

邹俊豪
2023-03-14

我回来时问了同样的问题,但这次有更多的记录。我有一个包含许多servlet和JSP的web应用程序。应用程序有一个登录选项。在登录servlet中,我启动一个新会话,在会话中放置一些信息后,我转到一个JSP。

登录。java相关代码:

HttpSession sess = request.getSession(true);
sess.setAttribute("GLN", user);
rd.forward(request, response);

转发后,我得到一个名为Insert.jsp的Jsp页面,在那里我得到会话属性。

插入jsp相关代码:

HttpSession sess = request.getSession(false);
if (sess != null){
out.println(sess.getAttribute("GLN"));
}

在这之后,我有一个表单将我引导到servlet Adaugare。JAVA在这里,我做了同样的事情:

阿杜加雷。java代码:

HttpSession sess = request.getSession(false);

问题来了。稍后编辑:由于不存在会话,因此返回null。然后我转发同样的插页。jsp文件,即使我有HttpSession sess=request。getSession(错误);,创建的新会话ID与第一个会话不同。所以很明显,我要离开了。println(sess.getAttribute(“GLN”);返回null。

这是一个很长的故事。简短的版本:

当我从一个servlet转到一个jsp时,会话是可以的,当我从一个jsp转到一个servlet时,会话是不存在的。然后,当我转发到JSP时,会创建一个新会话。实际上,它创造了一个新的饼干。如果我从JSP和serlet打印contextPath,它是一样的。

但奇怪的是,当我在带有mod_jk的apache上运行应用程序时,会发生这种情况。当我从tomcat运行应用程序时,它工作正常......

请帮忙,我在这个问题上已经被困了两个星期了。

答:丹:(发短信想发表评论,需要等7个小时才能回答我自己的问题)我删除了所有留言。希望没问题。我不是负责服务器的人,但告诉我这不是多个工人的人。

worker.list=jk-status
worker.jk-status.type=status
worker.jk-status.read_only=true

worker.list=jk-manager
worker.jk-manager.type=status

worker.list=balancer
worker.balancer.type=lb

worker.balancer.error_escalation_time=0

worker.balancer.max_reply_timeouts=10

worker.balancer.balance_workers=node1
worker.node1.reference=worker.template
worker.node1.host=localhost
worker.node1.port=8109

worker.node1.activation=A

worker.balancer.balance_workers=node2
worker.node2.reference=worker.template
worker.node2.host=localhost
worker.node2.port=8209

worker.node2.activation=A

worker.template.type=ajp13

worker.template.socket_connect_timeout=5000

worker.template.socket_keepalive=true

worker.template.ping_mode=A

worker.template.ping_timeout=10000

worker.template.connection_pool_minsize=0

worker.template.connection_pool_timeout=600

worker.template.reply_timeout=300000

worker.template.recovery_options=3

共有1个答案

通鸿风
2023-03-14

如果请求在多个工作者之间平衡,则应将会话粘性标志设置为true。见:http://tomcat.apache.org/connectors-doc/reference/workers.html更多细节。你应该试试:

worker.balancer.sticky_session=True
 类似资料:
  • 我找到了很多关于这个问题的答案,但没有解决我的问题-所以我想给你看我的代码,希望有人能找到错误... 我有一个标准的超文本标记语言的形式,给一些数据与POST到下一个. php文件,我得到它,并将其保存到会话变量。我使用会话变量有两个原因: 如果有人重新加载页面,它应该显示与以前相同的信息 我需要在即将到来的php文件中的变量 代码如下: 第一个调用工作精细会话变量被设置,回声给出正确的值。重新加

  • 问题内容: 如何使 connect.sid cookie本身仅是会话cookie,而不是持久性cookie? 我尝试失败 但是cookie仍具有到期时间戳。 问题答案: 以上工作。因此,通过将maxAge设置为null,我确实管理了expressjs以使用会话cookie。ew

  • 使用嵌入式tomcat,这段代码可以工作: Servlet: JSP: 它设置属性,然后在servlet的jsp页面上打印出来。 然而,如果我试图在会话中设置属性,那么我不会得到相同的结果,相反,当使用此选项时,我会得到一个: Servlet: JSP:

  • 我将jsp/servlets用于一个基本的ajax应用程序。我正在用servlet设置一个会话,但返回了null。我的代码片段如下: Servlet: ajax工作得很好,只是会话检索似乎是个问题。在第一个if()中设置数据后,我就可以提取数据。但当我做另一个post请求时,它返回为空。我需要另一个HttpSession吗?非常感谢您的帮助,我是一名PHP开发人员,不是JSP,所以对我来说非常新鲜

  • 问题内容: 如何解决在PHP中重定向后丢失会话的问题? 最近,我遇到了一个非常常见的问题,即在重定向后丢失会话。在搜索该网站后,我仍然找不到任何解决方案(尽管这是最接近的解决方案)。 更新资料 我找到了答案,我想将它发布在这里,以帮助遇到同样问题的任何人。 问题答案: 首先,执行以下常规检查: 确保在任何会话被调用之前被调用。因此,一个安全的选择就是将其放在页面的开头,紧接着在开始声明之后,再放在

  • 问题内容: 我几个月前开始使用PHP。为了为我的网站创建一个登录系统,我阅读了有关cookie和会话及其区别(cookie存储在用户的浏览器中以及服务器上的会话中)的信息。当时,我更喜欢cookie(谁不喜欢cookie ?!),只是说:“谁在乎?我在将它存储在服务器中没有任何好处”,所以,我继续使用cookie我的学士毕业项目。但是,在完成了我的应用程序的大部分工作之后,我听说对于存储用户ID的