我一直试图找到原因,当我进行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">
他们发布的那一刻,会话就丢失了
调用文件上传 检查会话:null 空
这是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");
这是全面的方法。我不知道问题是什么。
答案 0 :(得分:0)
我已经缩小了这个问题,但我还没有解决它。它发生在我的重定向期间。我也没有正确编码URL。我修改了所有重定向以获得以下内容:
request.getRequestDispatcher(response.encodeRedirectURL("views/attachments.jsp")).forward(request, response);
这只能在服务器端解决,但在我处理来自客户端的重定向时无法提供解决方案。