【发布时间】: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