【问题标题】:Losing Session on POST在 POST 上丢失会话
【发布时间】:2017-04-05 10:41:52
【问题描述】:

我一直在试图找出当我执行 POST 时会话丢失的原因。

我正在整个应用程序中检查我的会话,但是当我调用特定的 servlet 时会话会中断,并且只会在这个特定的 servlet 上中断。这个问题是间歇性的,所以非常令人沮丧。我不确定需要什么,所以我会尽可能多地提供信息。

页面是通过 servlet 访问的。我可以验证会话是否仍然相同。

当用户通过应用程序进行路由时,我可以看到会话仍然相同。

检查会话:HTTP 会话 CEHKIIMEKHMH 调用获取详细信息 检查会话:HTTP 会话 CEHKIIMEKHMH 调用项目详细信息 检查会话:HTTP 会话 CEHKIIMEKHMH 调用附件控制器 检查会话:HTTP 会话 CEHKIIMEKHMH

public class Attachments extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		System.out.println("Calling Attachment Controller");
		HttpSession session = request.getSession(false);
		System.out.println("Checking Session:"+session);
		
		if(session != null){
			Object projectId = session.getAttribute("projectId");
			request.getRequestDispatcher(response.encodeURL("views/attachments.jsp")).forward(request, response);
		}else{
			System.err.println("Invalid session");
			response.sendRedirect("/");
		}
				
	}

}

这是我的表单发布。在我执行验证后,表单实际上是通过 javascript 提交的,我只是调用 $('#files).submit();不确定这是否真的重要。

<form id="files" name="files" method="POST" action="FileUpload" enctype="multipart/form-data">

他们发布的那一刻,会话就丢失了

调用文件上传 检查会话:空 空

这里是servlet的开始

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("Calling File Upload");
		HttpSession session = request.getSession(false);
		System.out.println("Checking Session:"+session);
		
		if(session != null){
			Object projectId = session.getAttribute("projectId");		
			System.out.println("Accessing File Upload: Session is valid");
   

这在所有方面都是相同的方法。我不知道问题是什么。

【问题讨论】:

  • 这可能是由于多部分表单请求。您可以尝试另一个没有多部分请求的 servlet doPost 并检查您是否仍然看到会话。
  • 这个问题是在开发中出现还是两者都出现(开发和生产)?
  • 目前这只发生在开发中。由于这个问题,我还没有将它投入生产。我会试试你的建议,看看它是否仍然存在。

标签: java session servlets session-variables


【解决方案1】:

我已缩小问题范围,但仍未解决。它发生在我的重定向期间。我也没有正确编码 URL。我已修改所有重定向以具有以下内容:

			request.getRequestDispatcher(response.encodeRedirectURL("views/attachments.jsp")).forward(request, response);

这只是在服务器端解决它,并且在我处理来自客户端的重定向时不提供解决方案。

【讨论】:

    猜你喜欢
    • 2011-11-11
    • 2015-08-20
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2013-08-10
    相关资源
    最近更新 更多