JavaWeb實現(xiàn)Session跨頁面?zhèn)鬟f數(shù)據(jù)
一、什么是 Session 會話?
- Session 就一個接口(HttpSession)。
- Session 就是會話。它是用來維護一個客戶端和服務(wù)器之間關(guān)聯(lián)的一種技術(shù)。
- 每個客戶端都有自己的一個 Session 會話。
- Session 會話中,我們經(jīng)常用來保存用戶登錄之后的信息。
二、如何創(chuàng)建 Session 和獲取(id 號,是否為新)
如何創(chuàng)建和獲取 Session。它們的 API 是一樣的。
request.getSession() 第一次調(diào)用是:創(chuàng)建 Session 會話之后調(diào)用都是:獲取前面創(chuàng)建好的 Session 會話對象。
isNew()判斷到底是不是剛創(chuàng)建出來的(新的)true 表示剛創(chuàng)建false 表示獲取之前創(chuàng)建
每個會話都有一個身份證號。也就是 ID 值。而且這個 ID 是唯一的。 getId() 得到 Session 的會話 id 值。
三、Session 域數(shù)據(jù)的存取
/**
* 往 Session 中保存數(shù)據(jù)
* @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("已經(jīng)往 Session 中保存了數(shù)據(jù)");
}
/**
* 獲取 Session 域中的數(shù)據(jù)
* @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 的數(shù)據(jù)是:" + attribute);
}四、Session 生命周期控制
public void setMaxInactiveInterval(int interval)
設(shè)置 Session 的超時時間(以秒為單位),超過指定的時長,Session 就會被銷毀。值為正數(shù)的時候,設(shè)定 Session 的超時時長。 負數(shù)表示永不超時(極少使用)public int getMaxInactiveInterval()獲取 Session 的超時時間public void invalidate()讓當前 Session 會話馬上超時無效。- Session 默認的超時時長是多少!
Session 默認的超時時間長為 30 分鐘。
因為在 Tomcat 服務(wù)器的配置文件 web.xml中默認有以下的配置,它就表示配置了當前 Tomcat 服務(wù)器下所有的 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)來進行單獨的設(shè) 置。session.setMaxInactiveInterval(int interval)單獨設(shè)置超時時長。
Session 超時的概念介紹:
Session的超時是指在一段時間內(nèi)沒有活動或用戶不再與服務(wù)器進行交互時,會話數(shù)據(jù)將自動過期失效。在Web開發(fā)中,會話是用來跟蹤用戶在網(wǎng)站上的活動狀態(tài)的一種機制。當用戶登錄到網(wǎng)站或應(yīng)用程序時,服務(wù)器會為其創(chuàng)建一個會話,并分配一個唯一的會話ID。該會話ID通常存儲在一個名為"session cookie"的小文件中,發(fā)送給用戶的瀏覽器。
每當用戶與服務(wù)器進行交互(例如訪問頁面,提交表單,或者與應(yīng)用程序進行交互),服務(wù)器都會根據(jù)會話ID來識別用戶,并根據(jù)需要更新會話數(shù)據(jù)。會話數(shù)據(jù)可能包括用戶登錄信息、購物車內(nèi)容、用戶偏好設(shè)置等等。
然而,如果用戶在一段時間內(nèi)沒有任何活動,服務(wù)器會自動將該會話標記為過期。這樣做的原因是為了安全和資源管理考慮。如果一個會話保持長時間處于活動狀態(tài),這可能會導(dǎo)致資源浪費和安全風險,因為其他人可能可以利用該會話進行非法操作。因此,通過設(shè)置會話超時時間,可以確保閑置會話在一段時間后自動關(guān)閉,從而降低風險并釋放服務(wù)器資源。
會話超時時間可以根據(jù)具體的應(yīng)用場景和安全需求進行配置。通常,銀行或其他敏感信息應(yīng)用可能會設(shè)置較短的會話超時時間,以增加安全性。而在一些社交媒體或新聞網(wǎng)站等應(yīng)用中,可能會設(shè)置較長的會話超時時間,以提供更好的用戶體驗。
總的來說,會話超時是會話管理的重要方面,有助于平衡用戶體驗和安全性之間的關(guān)系。

protected void life3(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 先獲取Session對象
HttpSession session = req.getSession();
// 設(shè)置當前Session3秒后超時
session.setMaxInactiveInterval(3);
resp.getWriter().write("當前Session已經(jīng)設(shè)置為3秒后超時");
}Session 馬上被超時示例:
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 先獲取Session對象
HttpSession session = req.getSession();
// 讓Session會話馬上超時
session.invalidate();
resp.getWriter().write("Session已經(jīng)設(shè)置為超時(無效)");
} protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 獲取了Session的默認超時時長
int maxInactiveInterval = req.getSession().getMaxInactiveInterval();
resp.getWriter().write("Session的默認超時時長為:" + maxInactiveInterval + " 秒 ");
}五、Session的銷毀
在計算機科學和網(wǎng)絡(luò)編程中,"session"一詞可以指代多個概念,因此有幾種情況可能導(dǎo)致會話(session)銷毀。以下是一些常見的情況:
- 用戶主動注銷:當用戶選擇退出當前會話時,會話會被銷毀。這可以在網(wǎng)站或應(yīng)用程序中通過點擊"注銷"或"退出"按鈕來實現(xiàn)。
- 用戶關(guān)閉瀏覽器會話:當關(guān)閉當前瀏覽器窗口時,會話(session)通常會被銷毀,但這取決于具體的實現(xiàn)方式和配置。在大多數(shù)情況下,當用戶關(guān)閉瀏覽器窗口時,瀏覽器會自動刪除與該會話相關(guān)的會話標識符(session ID)和會話數(shù)據(jù)。這導(dǎo)致服務(wù)器上的會話失效并被銷毀。當用戶再次打開瀏覽器并訪問相同的網(wǎng)站時,將會創(chuàng)建一個新的會話。然而,需要注意的是,瀏覽器的行為可以受到不同因素的影響。例如,瀏覽器可能提供"恢復(fù)會話"的功能,使用戶能夠重新打開上次關(guān)閉的窗口并繼續(xù)之前的會話。在這種情況下,會話可能不會立即銷毀。此外,開發(fā)人員也可以通過在會話中設(shè)置持久性的 cookie 或其他技術(shù)來實現(xiàn)會話的跨會話保留。這樣,即使關(guān)閉瀏覽器窗口,會話數(shù)據(jù)仍然可以在下次打開瀏覽器時恢復(fù)。但這不是會話的標準行為,而是開發(fā)人員根據(jù)需求進行的特定實現(xiàn)。因此,總的來說,關(guān)閉當前瀏覽器窗口通常會導(dǎo)致會話被銷毀,但具體行為可能會受到瀏覽器配置、會話管理策略以及開發(fā)人員實現(xiàn)的影響。
- 會話超時:為了提高安全性,許多系統(tǒng)會設(shè)置會話超時時間。如果在一段時間內(nèi)沒有用戶活動,會話可能會被銷毀。超時時間可以是固定的(例如,30分鐘)或根據(jù)用戶活動動態(tài)調(diào)整。
- 服務(wù)器重啟或崩潰:如果服務(wù)器在會話期間發(fā)生重啟或崩潰,所有當前活動的會話通常都會被銷毀。在服務(wù)器重新啟動后,用戶需要重新建立新的會話。
- 并發(fā)限制:某些系統(tǒng)可能對同時活動的會話數(shù)進行限制。如果達到了最大并發(fā)會話數(shù),新的會話請求可能會導(dǎo)致舊的會話被銷毀,以便為新會話騰出空間。
- 安全性事件:如果系統(tǒng)檢測到會話被破壞、會話劫持或其他安全性事件,它可能會立即銷毀相關(guān)的會話。
五、瀏覽器和 Session 之間關(guān)聯(lián)的技術(shù)內(nèi)幕
瀏覽器和Session之間的關(guān)聯(lián)涉及到幾個關(guān)鍵技術(shù)內(nèi)幕。在Web開發(fā)中,會話(Session)是一種在服務(wù)器和瀏覽器之間跟蹤用戶狀態(tài)的機制。以下是瀏覽器和Session之間關(guān)聯(lián)的技術(shù)內(nèi)幕:
- Cookie:Cookie是存儲在用戶瀏覽器中的小型文本文件,由服務(wù)器通過HTTP響應(yīng)頭發(fā)送給瀏覽器,并在后續(xù)的請求中通過HTTP請求頭傳回給服務(wù)器。Cookie通常包含會話ID等信息,用于標識用戶的會話狀態(tài)。服務(wù)器可以使用這個會話ID來識別用戶,并維護用戶的會話數(shù)據(jù)。
- Session ID:當用戶首次訪問一個使用Session的網(wǎng)站時,服務(wù)器會為用戶生成一個唯一的Session ID。這個Session ID通常被存儲在一個名為"session cookie"的Cookie中,它會隨著每個請求發(fā)送回服務(wù)器,以便服務(wù)器能夠識別和管理用戶的會話狀態(tài)。
- 會話管理:服務(wù)器使用會話管理技術(shù)來跟蹤和管理用戶的會話狀態(tài)。一旦用戶通過Cookie提供了Session ID,服務(wù)器就可以將該Session ID與會話數(shù)據(jù)相關(guān)聯(lián),并在后續(xù)的請求中使用該ID來識別用戶。
- 會話數(shù)據(jù):服務(wù)器可以將用戶特定的數(shù)據(jù)存儲在會話中,如登錄狀態(tài)、購物車內(nèi)容、用戶偏好設(shè)置等。這些會話數(shù)據(jù)在用戶與服務(wù)器之間的多個請求之間持久存在,從而提供了連續(xù)和一致的用戶體驗。
- 會話超時:為了安全和資源管理,會話通常有一個超時機制。服務(wù)器可以設(shè)置會話的最大時長,在用戶一段時間內(nèi)沒有活動時,會話將被標記為過期并自動失效。
總體來說,瀏覽器和Session之間的關(guān)聯(lián)是通過Cookie技術(shù)實現(xiàn)的。Cookie中存儲的Session ID允許服務(wù)器識別用戶,并跟蹤和管理用戶的會話狀態(tài)。這樣,服務(wù)器可以為每個用戶提供個性化和連續(xù)的服務(wù),而不需要每次都重新驗證身份或重復(fù)操作。

到此這篇關(guān)于 JavaWeb實現(xiàn)Session跨頁面?zhèn)鬟f數(shù)據(jù)的文章就介紹到這了,更多相關(guān) JavaWeb Session跨頁面?zhèn)鬟f內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot Apollo配置yml的問題及解決方案
這篇文章主要介紹了Springboot Apollo配置yml的問題及解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
深入理解Java責任鏈模式實現(xiàn)靈活的請求處理流程
本文詳細介紹了Java中的責任鏈模式,幫助您理解其工作原理,以及如何在代碼中實現(xiàn)。該模式可以將請求沿著處理鏈路傳遞,實現(xiàn)靈活的請求處理流程。通過本文的學習,您將獲得在Java應(yīng)用程序中使用責任鏈模式的知識和技能2023-04-04
MyBatis-Plus Sequence主鍵的實現(xiàn)
這篇文章主要介紹了MyBatis-Plus Sequence主鍵的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
Java如何實現(xiàn)kaptcha網(wǎng)頁驗證碼驗證
在做關(guān)于SSM項目之商鋪系統(tǒng)時,了解到了kaptcha實現(xiàn)網(wǎng)頁驗證碼驗證,感覺就很有趣,所以便開始學習記錄了起來,復(fù)制粘貼即可用2025-01-01
Spring?MVC中的Controller進行單元測試的實現(xiàn)
本文主要介紹了如何對Spring?MVC中的Controller進行單元測試的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02

