管理瀏覽器與伺服器之間的會話過程中產生的會話資料
經過分析,資料共享可以使用域物件,因為servletcontext只有乙個,導致每次向裡面放資料的時候,如果鍵相同,值就會覆蓋所以不可行.而request物件雖然是多個,但是如果要取到共享的資料,需要使用**,所以也不可行.因此出現了會話管理技術
cookie技術:資料儲存在瀏覽器端
session技術:資料儲存在伺服器端
1.由伺服器建立cookie物件,傳送給瀏覽器,瀏覽器會儲存到快取中去,response.addcookie(cookie); (響應頭:set-cookie:name=jacky)
2.下次訪問攜帶儲存的cookie資訊,請求頭:cookie:name=jacky
3.伺服器獲取瀏覽器傳送的cookie資料,response.getcookiess()
注意:如果需要傳送中文資料,需要使用urlencoder.encode()進行加密
1.cookie的資料型別一定是字串,如果要傳送中文,必須先對中文進行url加密才可以傳送
2.setpath():修改cookie所在的有效路徑.什麼是有效路徑?如果把該cookie設定到某個有效路徑下,每當瀏覽器訪問這個有效路徑的時候,才會攜帶cookie資料給伺服器
3.setmaxage(整數):設定cookie的有效時間
正整數:表示超過了正整數的數值時間,cookie就會丟失(單位秒)
負整數:如果瀏覽器關閉了,cookie就丟失
0:刪除同名的cookie
4.cookie可以有多個,但是瀏覽器一般只允許存放300個cookie,每個站點最多存放20個cookie,每個cookie的大小限制為4kb
cookie特點:
1.會話資料放在瀏覽器端
2.資料型別只能是string,而且有大小限制(4kb)
3.相對資料不安全
session特點:
1.會話資料放在伺服器端(伺服器記憶體),占用伺服器的資源
2.資料型別任意,沒有大小限制
3.相對安全一點
httpsession物件:
1.建立httpsession物件,用於儲存會話資料
request.getsession();建立或者獲取session物件
2.修改httpsession物件
void setmaxinactiveinterval(int interval) 設定session物件的有效時間
void invalid() 手動銷毀session物件
3.儲存會話資料(作為域物件)
session.setattribute(「name」,object); 儲存資料
session.getattribute(「name」); 獲取資料
session.removeattribute(「name」); 刪除資料
問題:伺服器怎麼區分不同的瀏覽器會話?
前提:可以從session物件中取出資料,必須是操作的是同乙個session物件
1.伺服器建立session物件,伺服器會給這個session物件分配唯一的標記jsession
2.把jsession作為cookie傳送給伺服器
3.瀏覽器儲存jsession,在下次訪問的時候攜帶這個jsession去訪問伺服器
4.伺服器得到jsession物件,在記憶體中搜尋是否存在指定jsession的session物件
5.如果找到,則返回這個session物件
6.如果找不到,可能直接返回null,或者再建立新的session物件
結論:通過jsession在伺服器中查詢對應的session物件
1.setmaxinactiveinterval(秒數):設定session物件的有效時間
問題:session物件在上面時候銷毀?
注意:不是瀏覽器關閉,session物件就銷毀!!!
預設情況下:等待30分鐘空閒時間,session物件才會銷毀
2.可以讓jsession不會隨著瀏覽器關閉而丟失
3.直接手動銷毀session物件
invalidate()
4.建立或者獲取session物件
request.getsession() = request.getsession(true); 建立或者得到session物件,查詢session物件,如果沒有session物件,則建立新的session物件
request.getsession(false) 得到session物件.查詢session物件,如果session物件不存在,則直接返回null
會話管理 Cookie Session
乙個客戶端為了實現某個功能和伺服器產生的多次請求和加在一起成為一次會話,會話不可避免的就會產生和會話相關的資料,這些資料如何儲存是會話技術討論的重點內容,可以使用cookie 和 session這兩種技術儲存會話相關的資料 sun公司提供了便捷的api去操作cookie 1 cookie c new...
Spring Boot 會話管理
前情提要 本來專案用shiro可以用來作為會話管理,要配不少東西,且不一定有結果。並且用shiro會話管理會和devtools 熱部署包 衝突,需要剔除該包。此處不使用shiro進行會話管理,而是使用spring session redis實現session共享。1.新增依賴 org.springf...
Web會話管理
基於token的管理 重新整理安全問題 web應用通常使用的是http請求,但是http是無狀態的,一次請求結束,連線就會自動斷開,伺服器只能知道每個請求的 位址,可是這對會話的管理毫無意義。根本無法對使用者進行認證和許可權控制。於是,就有了相應的方案來解決這問題。常用的方法有三個 在早期的web應...