會話是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 非同步網路框架 很多...