我一直在試圖找出爲什麼我的會話會在我進行POST時丟失的原因。在POST上丟失會話
我在整個應用程序中檢查我的會話,但是當我調用一個特定的servlet時,會話將會丟失,並且它只會落在這個特定的servlet上。問題是間歇性的,所以非常令人沮喪。我不確定需要什麼,所以我會盡可能多地提供信息。
頁面通過servlet訪問。我可以驗證會話仍然是一樣的。
由於用戶通過應用程序路由,我可以看到會話仍然是相同的。
檢查會話:HTTP會話CEHKIIMEKHMH 調用get詳細 檢查會話:HTTP會話CEHKIIMEKHMH 調用項目詳情 檢查會話:HTTP會話CEHKIIMEKHMH 調用安裝時控制 檢查會話:HTTP會話CEHKIIMEKHMH
public class Attachments extends HttpServlet {
\t private static final long serialVersionUID = 1L;
\t protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
\t
\t \t System.out.println("Calling Attachment Controller");
\t \t HttpSession session = request.getSession(false);
\t \t System.out.println("Checking Session:"+session);
\t \t
\t \t if(session != null){
\t \t \t Object projectId = session.getAttribute("projectId");
\t \t \t request.getRequestDispatcher(response.encodeURL("views/attachments.jsp")).forward(request, response);
\t \t }else{
\t \t \t System.err.println("Invalid session");
\t \t \t response.sendRedirect("/");
\t \t }
\t \t \t \t
\t }
}
這是我的表單發佈。在我執行驗證後,表單實際上是通過javascript提交的,我只是簡單地調用$('#files).submit();不知道這真的很重要。
<form id="files" name="files" method="POST" action="FileUpload" enctype="multipart/form-data">
他們發佈的那一刻,會話丟失
調用的文件上傳 檢查會話:空 空
這裏是servlet開始
\t protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
\t \t
\t \t System.out.println("Calling File Upload");
\t \t HttpSession session = request.getSession(false);
\t \t System.out.println("Checking Session:"+session);
\t \t
\t \t if(session != null){
\t \t \t Object projectId = session.getAttribute("projectId"); \t \t
\t \t \t System.out.println("Accessing File Upload: Session is valid");
這一切都是一樣的方法。我不知道問題是什麼。
這可能是由於多部分表單請求。你可以嘗試另一個沒有多部分請求的servlet doPost,並檢查你是否仍然看到會話。 – amitmah
這個問題是發生在開發還是兩者(開發和生產)? –
目前這隻發生在開發中。由於這個問題,我沒有將它投入生產。我會試一試,看看它是否仍然存在。 – user3183411