url override and HttpSession implements session
背景
HttpSession默認使用Cookie存儲Session ID,如果在用戶禁用瀏覽器Cookie的功能后,仍打算運用HttpSession來進行會話管理,那么可以搭配URL重寫來實現。
實現方法
使用HttpServletResponse的encodeURL()方法協助產生URL。
服務器端調用request.getSession()時,
如果容器能從HTTP請求中取得帶有Session ID的Cookie,則response.encodeURL()會將傳入的URL原封不動地輸出。
如果容器不能從HTTP請求中取得帶有Session ID的Cookie時(通常是瀏覽器禁用Cookie的情況),response.encodeURL()會自動產生帶有Session ID的URL。
注意
在瀏覽器第一次請求網站時,容器并不知道瀏覽器是否禁用了Cookie,所以容器的做法是Cookie與URL重寫兩種方式并用來往客戶端發送session Id。
url重寫實現HttpSession可以實現跨瀏覽器的會話管理。在HttpSession存活期間,只要有人取得當次的Session ID,在另一瀏覽器相同的URL附上Session ID,就可以取得同一個HttpSession對象。
重定向
HttpServletResponse上的encodeRedirectURL()方法,可以在要求瀏覽器重定向時,在URL上攜帶Session ID。
Demo
package com.test;import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.io.PrintWriter;@WebServlet("/url.session") public class URLOverrideHttpSession extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();/*** 實現url重寫來實現session,只需要兩行代碼* 1、獲取session* 2、使用responce發送url** 注意:這兩行代碼的順序不可變*/HttpSession session = request.getSession();out.println("<a href='" + response.encodeURL("url.session") + "'>提交</a>");out.close();} }測試方法
測試過程中注意觀察地址欄URl
1、訪問:127.0.0.1:8080/url.session
2、點擊“提交”
3、關閉瀏覽器的cookie功能,再次測試
轉載于:https://www.cnblogs.com/Mike_Chang/p/10054557.html
總結
以上是生活随笔為你收集整理的url override and HttpSession implements session的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机按键怎么强制恢复出厂设置?
- 下一篇: 思维水题