啥是Session?

来源:https://www.cnblogs.com/kohler21/archive/2022/09/27/16735804.html
-Advertisement-
Play Games

什麼是 Session 會話? 1、Session 就一個介面(HttpSession)。 2、Session 就是會話。它是用來維護一個客戶端和伺服器之間關聯的一種技術。 3、每個客戶端都有自己的一個 Session 會話。 4、Session 會話中,我們經常用來保存用戶登錄之後的信息。 如何創 ...


什麼是 Session 會話?

1、Session 就一個介面(HttpSession)。
2、Session 就是會話。它是用來維護一個客戶端和伺服器之間關聯的一種技術。
3、每個客戶端都有自己的一個 Session 會話。
4、Session 會話中,我們經常用來保存用戶登錄之後的信息。

如何創建和獲取 Session

如何創建和獲取 Session。它們的 API 是一樣的。
request.getSession()

第一次調用是:創建 Session 會話
之後調用都是:獲取前面創建好的 Session 會話對象。

isNew(); 判斷到底是不是剛創建出來的(新的)

true 表示剛創建
false 表示獲取之前創建

每個會話都有一個身份證號。也就是 ID 值。而且這個 ID 是唯一的。
getId() 得到 Session 的會話 id 值。

Session 域數據的存取

//保存數據
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
  req.getSession().setAttribute("key1", "value1");
  resp.getWriter().write(" 已經往 Session 中保存了數據");
}
//獲取數據
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 工程。創建出來 的所有 Session 預設是 20 分鐘 超時時長 -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>

如果你想只修改個別 Session 的超時時長。就可以使用上面的 API。setMaxInactiveInterval(int interval)來進行單獨的設置。
session.setMaxInactiveInterval(int interval)單獨設置超時時長。
Session 超時的概念:
image

示例代碼:

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 已經設置為超時(無效)");
}

瀏覽器和 Session 之間關聯的技術內幕 之間關聯的技術

image

歡迎關註公眾號:愚生淺末。

歡迎關註我的公眾號,共同學習


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述 tomcat亂碼問題相信大家肯定都遇見過,本篇將詳細介紹有關Tomcat的各種亂碼問題原因和解決方法😊 原因 首先亂碼問題的原因通俗的講就是讀的編碼格式和寫的解碼格式不一致,比如最常見的兩種中文編碼UTF-8和GBK,UTF-8一個漢字占三個位元組,GBK一個漢字占兩個位元組,所以當編碼與解碼格 ...
  • 簡述 類型:結構型 目的:將對象集合組合成樹形結構,使客戶端可以以一致的方式處理單個對象(葉子節點)和組合對象(根節點) 話不多說,上優化案例。 優化案例 最初版v0 不使用組合模式。 現有一個文件和目錄的管理模塊。如樣例。 public class File { // 文件類 private St ...
  • 探索密碼學的奇妙之旅。介紹HMAC單向散列消息認證碼、加鹽。使用golang crypto包實現HMAC生成與驗證,重放攻擊演示。 ...
  • ###一、簡介 什麼是分散式爬蟲? 分散式爬蟲就是把一個爬蟲任務放到多台機器上去運行,提高爬取效率 但是每台機器運行同一套代碼,都在各自的任務和去重隊列,等於各爬各的,最終爬的數據是相同的 因此需要提供一個公共的去重隊列和公共的任務隊列,多台機器都在共用的隊列中去調度和去重,然後分別爬取 原來scr ...
  • 可視化打包 exe,這個神器絕了 auto-py-to-exe 是一個用於將Python程式打包成可執行文件的圖形化工具。本文就是主要介紹如何使用 auto-py-to-exe 完成 python 程式打包。auto-py-to-exe 基於 pyinstaller ,相比於 pyinstaller ...
  • 如何將編寫的c語言程式打包成exe可執行文件呢? 以前我們寫程式很多是在編輯器上,讓編輯起來編譯運行我們的程式。如果想將其打包成exe可執行文件該如何做? 我這裡推薦使用codeBlocks的gcc命令,因為比較簡單。像vs這種編輯器就像是一把屠龍刀。功能過於複雜,需要註意的很多。如何適用codeB ...
  • 《Go 精進之路》 讀書筆記。簡要記錄自己打五角星的部分,方便複習鞏固。目前看到p120 Go 語言遵從的設計哲學為組合 垂直組合:類型嵌入,快速讓一個類型復用其他類型已經實現的能力,實現功能的垂直擴展。 水平組合:介面實現鴨子類型。 變數名字中不要帶有類型信息 userSlice []*User ...
  • 怎麼借鑒開源代碼來打造一些自身面對的問題解決方案?也許有一些Demo來進行回答演示或許更為貼近地氣些。這裡打算寫一些玩轉源碼為主題的文字來實踐的回答,最近在看P3C的一些源碼,那就從這開始吧。 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...