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

时间:2012-10-08 11:11:25

标签: java jsp session servlets cookies

我回答同样的问题,但这次记录更多。我有一个包含许多servlet和JSP的Web应用程序。该应用程序具有LogIn选项。在LogIn servlet中,我启动一个新会话,在会话中放入一些信息后,我将转到JSP。

LogIn.java相关代码:

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

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

Insert.jsp相关代码:

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

在此之后,我有一个表单,指示我到一个servlet Adaugare.java。在这里,我做同样的事情:

Adaugare.java代码:

HttpSession sess = request.getSession(false);

这就是问题所在。 稍后编辑:返回null,因为不存在会话。然后我转发到相同的Insert.jsp文件,即使我有HttpSession sess = request.getSession(false);,也会创建一个与第一个会话ID不同的新会话ID。很明显 通过out.println(sess.getAttribute(" GLN&#34));返回null。

这是长篇故事。简短版本:

当我从servlet转到jsp时,会话没问题,当我从jsp转到servlet时,会话无处可寻。然后,当我转发到JSP时,会创建一个新会话。实际上它创建了一个新的cookie。如果我从JSP和serlet打印contextPath,它是相同的。

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

请帮忙,我已经被困2周了。

回答dan :(文本要求评论,需要等待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 个答案:

答案 0 :(得分:1)

如果请求在多个worker之间平衡,则应将session stickyiness标志设置为true。有关详细信息,请参阅:http://tomcat.apache.org/connectors-doc/reference/workers.html。你应该试试:

worker.balancer.sticky_session=True