Session隨便寫的(抄書筆記)

2021-09-08 15:04:01 字數 2826 閱讀 6537

會話是web開發中常用的一種物件。

會話是存在於伺服器端的物件,因此會話超時是保證效能效率的必要手段,本章將學習幾種常用的使會話失效的辦法。

大多數容器都使用cookie作為會話跟蹤的基礎,但是cookie機制可能被客戶端禁止。本章將學習如何使用url重寫,保證會話被禁止時會話機制仍然有效。

客戶端對伺服器端一次連續的訪問過程,稱為會話

httpsession介面用來表示會話物件

httpsession中和屬性有關的方法

public void setattribute(string name,object value)

public object getattribute(string name)

public void removeattribute(string name)

通過請求物件的方法獲得會話物件

public httpsession getsession()獲得與當前請求相關的session物件,如果當前請求中不存在session物件,則建立乙個新的session物件返回

public httpsession getsession(boolean create) 如果引數為true,與getsession()沒有區別,如果引數為false,當不存在session的時候直接返回null

請求和會話都可以儲存屬性,但是有什麼呢區別呢?

請求和會話都可以儲存屬性,但是請求物件的生命周期短,除了請求**可以將請求**下去,其他情況下請求物件都會被重新建立。而會話物件在一次會話過程中,都會唯一維護乙個會話物件。因此,只有儲存到會話物件中的屬性才考慮使用會話物件傳遞。只要請求範圍使用的屬性,都應該使用請求物件傳遞,以保證效能和效率

jsp中的會話物件

jsp中內建物件session,是httpsession物件

預設情況下,jsp總是建立session物件,可以直接使用

我們知道在servlet中使用session物件之前,都必須使用請求物件獲取會話物件:

而如果在jsp中使用session物件,可以直接使用session內建物件

<%

session.setattribute("obj","test");

string obj=(string)session.getattribute("obj");

%>

內建物件session是容器宣告並建立的物件,所以子啊jsp檔案中不需要宣告,可以直接使用,但是名字必須為session,大小寫敏感。

會話的實現機制:

會話的實現依賴於容器

大多數容器採用基於cooki的實現機制

基於cookie的實現機制,採用名為jsessionid的cookie作為session的唯一標識

httpsession是容器建立的額物件,並儲存在容器中,每個會話物件都與乙個特定的客戶端相關,那麼容器是如何維護httpsession物件與客戶端一對一的關係的呢?大多數容器使用cookie機制來實現會話機制,例如tomcat就是使用cookie機制實現會話跟蹤。

當容器建立乙個新的httpsession物件後,即生成乙個隨機數,稱為會話id,並將id的值封裝給乙個名為jsessionid的cookie,返回給客戶端存在記憶體中。當應用程式通過request.getsession()獲得會話物件時,容器先從當前的request物件中獲取jsessionid值,根據jsessionid值查詢對應的session物件,如果存在,則返回使用,否則將建立新的物件返回.如果沒有獲取到jsessionid的值,認為當前請求沒有相關聯的session物件。

由於jsp檔案中總是預設建立session內建物件,所以只要訪問一次jsp檔案,容器就會建立乙個session物件,建立乙個session物件後,容器就會為該session生成乙個隨機數id,是乙個十六進製制的隨機整數,並把這個id存為乙個名為jsessionid的cookie。因此下次訪問該jsp檔案時,就能獲得乙個名字是jsessionid的cookie,其值就是容器生成的會話id。

url重寫

通過修改客戶端瀏覽器設定,可以禁止傳送cookie

如果cookie被禁止,那麼基於cookie實現的session將失效

為了解決cookie禁止session失效的問題,可以使用url重寫技術

url重寫:

就是通過httpservletresponse中的encodeurl方法,將jsessionid的值強制追加到url當中,保證即使cookie被阻止後jsessionid仍然能傳遞到伺服器

">view my person info.

這裡使用response.encodeurl將getpersonal的位址重新編碼,將jsessionid的值強制加到url中,保證即使cookie被阻止後jessionid依然能夠被傳遞到伺服器。

觀察這個圖,你就發現,位址列發生了變化:

會話超時

為了有效使用記憶體,以及保證安全性,會話在一定時間內不被使用(稱為會話超時),將被銷毀

有三種策略可以使會話超時:

web.xml中配置會話超時時間(分鐘)

40使用setmaxinactiveinterval設定超時時間

public void setmaxinactiveinterval(int interval) 對於具體的乙個session物件,可以通過呼叫setmaxinactiveinterval方法設定最大不活動時間,超過這個時間會話沒有被訪問,即被容器銷毀

使用invalidate方法直接將某會話設定為失效

public void invalidate() 任何乙個session物件,呼叫invalidate方法,都會被立即銷毀,同時被繫結到session上的屬性也將被解除,不能再次使用

a隨便寫的nodejs學習筆記 3

上面附上大致的檔案及路徑 其中的index.html檔案內容如下 這是首頁 nodejs檔案內容如下 html中所有的外部資源路徑都會變成網路請求 1.匯入模組 2.建立伺服器 3.開啟伺服器 server.listen 3000,將上面的js檔案精簡一下,變成下面的樣子 html中所有的外部資源路...

隨便寫的蛇形矩陣

問題描述 蛇形矩陣是由1開始的自然數依次排列成的乙個矩陣上三角形。要求 資料輸入 本題有多組資料,每組資料由乙個正整數n組成。n不大於100 資料輸出 對於每一組資料,輸出乙個n行的蛇形矩陣。兩組輸出之間不要額外的空行。矩陣三角中同一行的數字用乙個空格分開。行尾不要多餘的空格。樣例輸入 5 樣例輸出...

《隨便寫》 多執行緒的例子

乙個執行緒在使用這個共享的時候,其他執行緒必須等待他結束 通過 鎖 實現,作用就是防止多個執行緒使用這片記憶體空間 程序 程式的一次執行 執行緒 cpu運算的基本排程單位 多執行緒 大量密集i o處理,在等待響應的時候,其他執行緒去工作 多程序 大量的密集平行計算 scrapy 非同步網路框架 很多...