url override and HttpSession implements session
背景
HttpSession默認(rèn)使用Cookie存儲(chǔ)Session ID,如果在用戶禁用瀏覽器Cookie的功能后,仍打算運(yùn)用HttpSession來(lái)進(jìn)行會(huì)話管理,那么可以搭配URL重寫(xiě)來(lái)實(shí)現(xiàn)。
實(shí)現(xiàn)方法
使用HttpServletResponse的encodeURL()方法協(xié)助產(chǎn)生URL。
服務(wù)器端調(diào)用request.getSession()時(shí),
如果容器能從HTTP請(qǐng)求中取得帶有Session ID的Cookie,則response.encodeURL()會(huì)將傳入的URL原封不動(dòng)地輸出。
如果容器不能從HTTP請(qǐng)求中取得帶有Session ID的Cookie時(shí)(通常是瀏覽器禁用Cookie的情況),response.encodeURL()會(huì)自動(dòng)產(chǎn)生帶有Session ID的URL。
注意
在瀏覽器第一次請(qǐng)求網(wǎng)站時(shí),容器并不知道瀏覽器是否禁用了Cookie,所以容器的做法是Cookie與URL重寫(xiě)兩種方式并用來(lái)往客戶端發(fā)送session Id。
url重寫(xiě)實(shí)現(xiàn)HttpSession可以實(shí)現(xiàn)跨瀏覽器的會(huì)話管理。在HttpSession存活期間,只要有人取得當(dāng)次的Session ID,在另一瀏覽器相同的URL附上Session ID,就可以取得同一個(gè)HttpSession對(duì)象。
重定向
HttpServletResponse上的encodeRedirectURL()方法,可以在要求瀏覽器重定向時(shí),在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();/*** 實(shí)現(xiàn)url重寫(xiě)來(lái)實(shí)現(xiàn)session,只需要兩行代碼* 1、獲取session* 2、使用responce發(fā)送url** 注意:這兩行代碼的順序不可變*/HttpSession session = request.getSession();out.println("<a href='" + response.encodeURL("url.session") + "'>提交</a>");out.close();} }測(cè)試方法
測(cè)試過(guò)程中注意觀察地址欄URl
1、訪問(wèn):127.0.0.1:8080/url.session
2、點(diǎn)擊“提交”
3、關(guān)閉瀏覽器的cookie功能,再次測(cè)試
轉(zhuǎn)載于:https://www.cnblogs.com/Mike_Chang/p/10054557.html
總結(jié)
以上是生活随笔為你收集整理的url override and HttpSession implements session的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 手机按键怎么强制恢复出厂设置?
- 下一篇: 手机被恢复出厂设置了怎么还原?