session依賴cookie,如果瀏覽器禁用了cookie呢?
阿新 • • 發佈:2018-12-17
- <form action='<%=response.encodeURL("/jsp/index.jsp") %>' method="post">
- <input type="submit" value="提交"/>
- </form>
我們都知道session依賴cookie,因為伺服器需要在每次請求中獲取sessionId,然後找到客戶端的session物件,如果瀏覽器禁用了cookie呢?
這個時候,就需要用到URL重寫了,這種方法讓伺服器收到的每個請求中都帶有sessioinId。
URL重寫的具體方法是:在每個頁面中的每個連結和表單中都新增名為jSessionId的引數,值為當前sessionid。當用戶點選連結或提交表單時也伺服器可以通過獲取jSessionId這個引數來得到客戶端的sessionId,找到sessoin物件,來看看具體的例子:
方法一:
------------連結------------
<a href='/jsp/index.jsp;jsessionid=<%=session.getId() %>' >主頁</a >
------------表單------------
- <form action='/jsp/index.jsp;jsessionid=<%=session.getId() %>' method="post">
- <input type="submit" value="提交"/>
- </form>
方法二 (使用response.encodeURL()對每個請求的URL處理,這個方法會自動追加jsessionid引數,與上面我們手動新增是一樣的效果。):
------------連結------------
<a href='<%=response.encodeURL("/jsp/index.jsp") %>' >主頁</a>
------------表單------------
- <form action='<%=response.encodeURL("/jsp/index.jsp") %>' method="post">
- <input type="submit" value="提交"/>
- </form>
使用response.encodeURL()更加“智慧”,它會判斷客戶端瀏覽器是否禁用了Cookie,如果禁用了,那麼這個方法在URL後面追加jsessionid,否則不會追加。
所以說,建議使用方法二。
- <form action='<%=response.encodeURL("/jsp/index.jsp") %>' method="post">
- <input type="submit" value="提交"/>
- </form>