1. 程式人生 > >session依賴cookie,如果瀏覽器禁用了cookie呢?

session依賴cookie,如果瀏覽器禁用了cookie呢?


  1. <form action='<%=response.encodeURL("/jsp/index.jsp") %>' method="post">
  2. <input type="submit" value="提交"/>
  3. </form>

我們都知道session依賴cookie,因為伺服器需要在每次請求中獲取sessionId,然後找到客戶端的session物件,如果瀏覽器禁用了cookie呢?


這個時候,就需要用到URL重寫了,這種方法讓伺服器收到的每個請求中都帶有sessioinId。


URL重寫的具體方法是:在每個頁面中的每個連結和表單中都新增名為jSessionId的引數,值為當前sessionid。當用戶點選連結或提交表單時也伺服器可以通過獲取jSessionId這個引數來得到客戶端的sessionId,找到sessoin物件,來看看具體的例子:


方法一

------------連結------------

<a href='/jsp/index.jsp;jsessionid=<%=session.getId() %>' >主頁</a
>

------------表單------------

  1. <form action='/jsp/index.jsp;jsessionid=<%=session.getId() %>' method="post">
  2. <input type="submit" value="提交"/>
  3. </form>



方法二 (使用response.encodeURL()對每個請求的URL處理,這個方法會自動追加jsessionid引數,與上面我們手動新增是一樣的效果。):

------------連結------------

<a href='<%=response.encodeURL("/jsp/index.jsp") %>' >主頁</a>

------------表單------------

  1. <form action='<%=response.encodeURL("/jsp/index.jsp") %>' method="post">
  2. <input type="submit" value="提交"/>
  3. </form>


使用response.encodeURL()更加“智慧”,它會判斷客戶端瀏覽器是否禁用了Cookie,如果禁用了,那麼這個方法在URL後面追加jsessionid,否則不會追加。

所以說,建議使用方法二。


  1. <form action='<%=response.encodeURL("/jsp/index.jsp") %>' method="post">
  2. <input type="submit" value="提交"/>
  3. </form>