2016-08-27 66 views
0

下面的代碼我正在寫Servlet並從index.html向這個servlet發出請求。 表格index.html我將會話的密鑰和值添加到其中。Servlet:當cookie被禁用時爲每個請求創建的新會話

HttpSession session = request.getSession(false); 
if(session == null){ 
    session = request.getSession(); 
} 

session.setAttribute(request.getParameter("key"), request.getParameter("val")); 

Enumeration list = session.getAttributeNames(); 
while(list.hasMoreElements()){ 
    String k = (String)list.nextElement(); 
    String v = (String)session.getAttribute(k); 
    System.out.println(k +"\t\t"+v); 
} 
response.sendRedirect(response.encodeRedirectURL("index.html"));

上面的代碼在啓用cookie時工作正常。

明知我禁用Cookie並運行此代碼。 我期待所有的屬性和他們的價值將被添加。但我只得到最後一個。我觀察到每次創建新會話時,每次都會更改帶有JESSIONID的URL。

我在Chrome和Firefox中測試了這一點。

請幫我檢查我在哪裏犯錯

感謝

+0

您如何看待HTTP請求與會話相關聯? HTTP是一種無狀態協議,所以如果你想保持狀態,那麼客戶端需要發回一些東西 - 無論是cookie還是別的東西,比如請求參數。 –

+0

如果cookie被禁用,我正在使用encodeRedirectURL()方法添加會話ID。 – sjain

+0

沒錯,但是接下來的請求會如何傳回會話ID呢?也許你需要提供更多關於整個流程的信息。 –

回答

0

要與@Andreas我下面的評論相助改變

  1. 我改變的index.html到index.jsp
  2. 而不是寫在表單動作中的Servlet.do我將其更改爲response.encodeURL(「Servlet.do」)。

現在在第二個等等請求與先前的JESSIONID發送到服務器。

謝謝Andreas的幫助。

相關問題