JavaWeb實現(xiàn)Session跨頁面?zhèn)鬟f數據
一、什么是 Session 會話?
- Session 就一個接口(HttpSession)。
- Session 就是會話。它是用來維護一個客戶端和服務器之間關聯(lián)的一種技術。
- 每個客戶端都有自己的一個 Session 會話。
- Session 會話中,我們經常用來保存用戶登錄之后的信息。
二、如何創(chuàng)建 Session 和獲取(id 號,是否為新)
如何創(chuàng)建和獲取 Session。它們的 API 是一樣的。
request.getSession()
第一次調用是:創(chuàng)建 Session 會話之后調用都是:獲取前面創(chuàng)建好的 Session 會話對象。
isNew()
判斷到底是不是剛創(chuàng)建出來的(新的)true 表示剛創(chuàng)建false 表示獲取之前創(chuàng)建
每個會話都有一個身份證號。也就是 ID 值。而且這個 ID 是唯一的。 getId()
得到 Session 的會話 id 值。
三、Session 域數據的存取
/** * 往 Session 中保存數據 * @param req * @param resp * @throws ServletException * @throws IOException */ protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getSession().setAttribute("key1", "value1"); resp.getWriter().write("已經往 Session 中保存了數據"); } /** * 獲取 Session 域中的數據 * @param req * @param resp * @throws ServletException * @throws IOException */ protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Object attribute = req.getSession().getAttribute("key1"); resp.getWriter().write("從 Session 中獲取出 key1 的數據是:" + attribute); }
四、Session 生命周期控制
public void setMaxInactiveInterval(int interval)
設置 Session 的超時時間(以秒為單位),超過指定的時長,Session 就會被銷毀。值為正數的時候,設定 Session 的超時時長。 負數表示永不超時(極少使用)public int getMaxInactiveInterval()
獲取 Session 的超時時間public void invalidate()
讓當前 Session 會話馬上超時無效。- Session 默認的超時時長是多少!
Session 默認的超時時間長為 30 分鐘。
因為在 Tomcat 服務器的配置文件 web.xml中默認有以下的配置,它就表示配置了當前 Tomcat 服務器下所有的 Session 超時配置默認時長為:30 分鐘。
<session-config> <session-timeout>30</session-timeout> </session-config>
如果說。你希望你的 web 工程,默認的 Session 的超時時長為其他時長。你可以在你自己的 web.xml 配置文件中做 以上相同的配置。就可以修改你的 web 工程所有 Seession 的默認超時時長。
<!--表示當前 web 工程。創(chuàng)建出來 的所有 Session 默認是 20 分鐘 超時時長--> <session-config> <session-timeout>20</session-timeout> </session-config>
如果你想只修改個別 Session 的超時時長。就可以使用上面的 API。setMaxInactiveInterval(int interval)
來進行單獨的設 置。session.setMaxInactiveInterval(int interval)
單獨設置超時時長。
Session 超時的概念介紹:
Session的超時是指在一段時間內沒有活動或用戶不再與服務器進行交互時,會話數據將自動過期失效。在Web開發(fā)中,會話是用來跟蹤用戶在網站上的活動狀態(tài)的一種機制。當用戶登錄到網站或應用程序時,服務器會為其創(chuàng)建一個會話,并分配一個唯一的會話ID。該會話ID通常存儲在一個名為"session cookie"的小文件中,發(fā)送給用戶的瀏覽器。
每當用戶與服務器進行交互(例如訪問頁面,提交表單,或者與應用程序進行交互),服務器都會根據會話ID來識別用戶,并根據需要更新會話數據。會話數據可能包括用戶登錄信息、購物車內容、用戶偏好設置等等。
然而,如果用戶在一段時間內沒有任何活動,服務器會自動將該會話標記為過期。這樣做的原因是為了安全和資源管理考慮。如果一個會話保持長時間處于活動狀態(tài),這可能會導致資源浪費和安全風險,因為其他人可能可以利用該會話進行非法操作。因此,通過設置會話超時時間,可以確保閑置會話在一段時間后自動關閉,從而降低風險并釋放服務器資源。
會話超時時間可以根據具體的應用場景和安全需求進行配置。通常,銀行或其他敏感信息應用可能會設置較短的會話超時時間,以增加安全性。而在一些社交媒體或新聞網站等應用中,可能會設置較長的會話超時時間,以提供更好的用戶體驗。
總的來說,會話超時是會話管理的重要方面,有助于平衡用戶體驗和安全性之間的關系。
protected void life3(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 先獲取Session對象 HttpSession session = req.getSession(); // 設置當前Session3秒后超時 session.setMaxInactiveInterval(3); resp.getWriter().write("當前Session已經設置為3秒后超時"); }
Session 馬上被超時示例:
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 先獲取Session對象 HttpSession session = req.getSession(); // 讓Session會話馬上超時 session.invalidate(); resp.getWriter().write("Session已經設置為超時(無效)"); }
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 獲取了Session的默認超時時長 int maxInactiveInterval = req.getSession().getMaxInactiveInterval(); resp.getWriter().write("Session的默認超時時長為:" + maxInactiveInterval + " 秒 "); }
五、Session的銷毀
在計算機科學和網絡編程中,"session"一詞可以指代多個概念,因此有幾種情況可能導致會話(session)銷毀。以下是一些常見的情況:
- 用戶主動注銷:當用戶選擇退出當前會話時,會話會被銷毀。這可以在網站或應用程序中通過點擊"注銷"或"退出"按鈕來實現(xiàn)。
- 用戶關閉瀏覽器會話:當關閉當前瀏覽器窗口時,會話(session)通常會被銷毀,但這取決于具體的實現(xiàn)方式和配置。在大多數情況下,當用戶關閉瀏覽器窗口時,瀏覽器會自動刪除與該會話相關的會話標識符(session ID)和會話數據。這導致服務器上的會話失效并被銷毀。當用戶再次打開瀏覽器并訪問相同的網站時,將會創(chuàng)建一個新的會話。然而,需要注意的是,瀏覽器的行為可以受到不同因素的影響。例如,瀏覽器可能提供"恢復會話"的功能,使用戶能夠重新打開上次關閉的窗口并繼續(xù)之前的會話。在這種情況下,會話可能不會立即銷毀。此外,開發(fā)人員也可以通過在會話中設置持久性的 cookie 或其他技術來實現(xiàn)會話的跨會話保留。這樣,即使關閉瀏覽器窗口,會話數據仍然可以在下次打開瀏覽器時恢復。但這不是會話的標準行為,而是開發(fā)人員根據需求進行的特定實現(xiàn)。因此,總的來說,關閉當前瀏覽器窗口通常會導致會話被銷毀,但具體行為可能會受到瀏覽器配置、會話管理策略以及開發(fā)人員實現(xiàn)的影響。
- 會話超時:為了提高安全性,許多系統(tǒng)會設置會話超時時間。如果在一段時間內沒有用戶活動,會話可能會被銷毀。超時時間可以是固定的(例如,30分鐘)或根據用戶活動動態(tài)調整。
- 服務器重啟或崩潰:如果服務器在會話期間發(fā)生重啟或崩潰,所有當前活動的會話通常都會被銷毀。在服務器重新啟動后,用戶需要重新建立新的會話。
- 并發(fā)限制:某些系統(tǒng)可能對同時活動的會話數進行限制。如果達到了最大并發(fā)會話數,新的會話請求可能會導致舊的會話被銷毀,以便為新會話騰出空間。
- 安全性事件:如果系統(tǒng)檢測到會話被破壞、會話劫持或其他安全性事件,它可能會立即銷毀相關的會話。
五、瀏覽器和 Session 之間關聯(lián)的技術內幕
瀏覽器和Session之間的關聯(lián)涉及到幾個關鍵技術內幕。在Web開發(fā)中,會話(Session)是一種在服務器和瀏覽器之間跟蹤用戶狀態(tài)的機制。以下是瀏覽器和Session之間關聯(lián)的技術內幕:
- Cookie:Cookie是存儲在用戶瀏覽器中的小型文本文件,由服務器通過HTTP響應頭發(fā)送給瀏覽器,并在后續(xù)的請求中通過HTTP請求頭傳回給服務器。Cookie通常包含會話ID等信息,用于標識用戶的會話狀態(tài)。服務器可以使用這個會話ID來識別用戶,并維護用戶的會話數據。
- Session ID:當用戶首次訪問一個使用Session的網站時,服務器會為用戶生成一個唯一的Session ID。這個Session ID通常被存儲在一個名為"session cookie"的Cookie中,它會隨著每個請求發(fā)送回服務器,以便服務器能夠識別和管理用戶的會話狀態(tài)。
- 會話管理:服務器使用會話管理技術來跟蹤和管理用戶的會話狀態(tài)。一旦用戶通過Cookie提供了Session ID,服務器就可以將該Session ID與會話數據相關聯(lián),并在后續(xù)的請求中使用該ID來識別用戶。
- 會話數據:服務器可以將用戶特定的數據存儲在會話中,如登錄狀態(tài)、購物車內容、用戶偏好設置等。這些會話數據在用戶與服務器之間的多個請求之間持久存在,從而提供了連續(xù)和一致的用戶體驗。
- 會話超時:為了安全和資源管理,會話通常有一個超時機制。服務器可以設置會話的最大時長,在用戶一段時間內沒有活動時,會話將被標記為過期并自動失效。
總體來說,瀏覽器和Session之間的關聯(lián)是通過Cookie技術實現(xiàn)的。Cookie中存儲的Session ID允許服務器識別用戶,并跟蹤和管理用戶的會話狀態(tài)。這樣,服務器可以為每個用戶提供個性化和連續(xù)的服務,而不需要每次都重新驗證身份或重復操作。
到此這篇關于 JavaWeb實現(xiàn)Session跨頁面?zhèn)鬟f數據的文章就介紹到這了,更多相關 JavaWeb Session跨頁面?zhèn)鬟f內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot Apollo配置yml的問題及解決方案
這篇文章主要介紹了Springboot Apollo配置yml的問題及解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06深入理解Java責任鏈模式實現(xiàn)靈活的請求處理流程
本文詳細介紹了Java中的責任鏈模式,幫助您理解其工作原理,以及如何在代碼中實現(xiàn)。該模式可以將請求沿著處理鏈路傳遞,實現(xiàn)靈活的請求處理流程。通過本文的學習,您將獲得在Java應用程序中使用責任鏈模式的知識和技能2023-04-04MyBatis-Plus Sequence主鍵的實現(xiàn)
這篇文章主要介紹了MyBatis-Plus Sequence主鍵的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12Spring?MVC中的Controller進行單元測試的實現(xiàn)
本文主要介紹了如何對Spring?MVC中的Controller進行單元測試的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02