會話管理
-
會話管理技術
-
Cookie技術
Cookie技術的使用
Cookie物件:步驟
(1)建立Cookie物件,用於儲存會話資料
new Cookie(java.lang.String name, java.lang.String value)
(2)修改Cookie物件
void setPath(java.lang.String uri)
void setMaxAge(int expiry)
void setValue(java.lang.String newValue)
(3)把cookie資料傳送給瀏覽器儲存
response.addCookie(cookie);
(4)瀏覽器帶著cookie訪問伺服器,伺服器接收cookie資訊
request.getCookies();
非簡化版本:
package cn.web001;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletCookie extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//建立Cookie物件,儲存會話資料
Cookie cookie = new Cookie("name","miemie");
//把cookie資料傳送給瀏覽器儲存,通過響應頭攜帶cookie資料給瀏覽器(set-cookie)
response.setHeader("set-cookie", "name=miemie");
//瀏覽器在下次訪問的時候攜帶了cookie資料,通過請求頭髮送給伺服器(cookie)
//伺服器獲取瀏覽器傳送的cookie資料
String header = response.getHeader("name");
System.out.println(header);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
簡化版本(物件導向)
package cn.web001;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletCookie extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//建立Cookie物件,儲存會話資料
Cookie cookie = new Cookie("name","miemie");
//把cookie資料傳送給瀏覽器儲存,通過響應頭攜帶cookie資料給瀏覽器(set-cookie)
//response.setHeader("set-cookie", "name=miemie");
response.addCookie(cookie);
//瀏覽器在下次訪問的時候攜帶了cookie資料,通過請求頭髮送給伺服器(cookie)
//伺服器獲取瀏覽器傳送的cookie資料
//String header = response.getHeader("name");
//System.out.println(header);
//簡化版本
Cookie[] cookies = request.getCookies();
if(cookies!=null) {
for(Cookie cookie1:cookies) {
String name= cookie1.getName();
String value = cookie1.getValue();
System.out.println(name+"="+value);
}
}else {
System.out.println("nullcookie");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
-
Cookie技術原理
(1)伺服器建立Cookie物件,儲存會話資料,把Cookie資料傳送給瀏覽器
response.addCookie(cookie); (響應頭:set-cookie: name=jacky)
(2)瀏覽器獲取cookie資料,儲存在瀏覽器快取區,然後在下次訪問伺服器時攜帶cookie資料
(請求頭: cookie: name=jacky)
(3)伺服器獲取瀏覽器傳送的cookie資料
request.getCookies();
-
Cookie細節
(1)cookie的資料型別一定是字串,如果要傳送中文,必須先對中文進行URL加密才可以傳送。
(2)setPath(path): 修改cookie所在的有效路徑。 如果把該cookie設定到某個有效路徑下,然後當瀏覽器訪問這個有效路徑的時候,才會攜帶cookie資料給伺服器。
(3) setMaxAge(整數) : 設定cookie的有效時間
正整數: 表示超過了正整數的數值的時間,cookie就會丟失(cookie儲存瀏覽器的快取。 目錄)單位:秒
負整數: 表示如果瀏覽器關閉了,cookie就會丟失(cookie儲存瀏覽器記憶體)。
0 : 表示刪除同名的cookie 。
(4)cookie可以有多個,但是瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB。
-
Session技術
Cookie特點:
1)會話資料放在瀏覽器端
2)資料型別只能string,而且有大小限制的
3)相對資料存放不安全。
Session特點:
1)會話資料放在伺服器端(伺服器記憶體),佔用伺服器資源
2)資料型別任意型別,沒有大小限制的。
3)相對安全
-
Session使用步驟
HttpSession物件:
1)建立HttpSession物件,用於儲存會話資料
session = request.getSession(); 建立或獲取session物件
2)修改HttpSession物件
void setMaxInactiveInterval(int interval) 設定session物件的有效時間
void invalidate() 手動銷燬session物件
3)儲存會話資料(作為域物件)
session.setAttribute(“name”,Object); 儲存資料
session.getAttribute(“name”) 獲取資料
session.removeAttribute(“name”) 刪除資料
-
Session原理
可以從session物件取出資料必須是存放資料的sessinon物件。
HttpSession session = request.getSession();含義((1)-(6))
(1)伺服器建立Session物件,伺服器會給這個session物件分配一個唯一的標記JSESSIONID。
(2)把JSESSIONID作為Cookie傳送給瀏覽器。
(3)瀏覽器得到JSESSIONID儲存下來,在下次訪問時攜帶這個JSESSIONID去訪問伺服器。
(4)伺服器得到JSESSIONID,在伺服器記憶體中搜尋是否存在指定JSSESSINOID的session物件。
(5)如果找到,則返回這個session物件。
(6)如果找不到,可能直接返回null,或者再建立新的session物件。
結論: 通過JSESSIONID在伺服器中查詢對應的session物件。
-
Session細節
1.setMaxInactiveInterval(秒數): 設定session物件的有效時間
注意:不是瀏覽器關閉,session物件就銷燬。
預設情況: 等待30分鐘空閒時間,session物件才會銷燬。
session.setMaxInactiveInterval(20);
<!-- 設定全域性的session物件的過期時間 (分鐘)-->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
2.可以讓JSESSIONID不會隨著瀏覽器關閉而丟失
/**
* 設定JSESSIONID的時間,不會隨著瀏覽器關閉而丟失。
*/
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(1*30*24*60*60);//1個月
response.addCookie(c);
3.直接手動銷燬sessino物件
invalidate();
4.建立或得到session物件
request.getSession() / request.getSession(true)
建立或得到session物件。查詢session物件,如果沒有sessino物件,則建立新的session物件。
//建立或得到session物件
HttpSession session =
request.getSession(true);
request.getSession(false)
得到session物件。查詢session物件,如果沒有session物件,直接返回null。
//得到session物件
HttpSession session =
request.getSession(false);
if(session==null){
System.out.println("沒有session物件");
}else{
//獲取會話資料
String name =
(String)session.getAttribute("name");
System.out.println("name="+name);
}
總結:
會話管理: 瀏覽器與伺服器之間會話過程中產生的會話資料
Cookie技術:會話資料儲存在瀏覽器
核心的API:
(1)建立Cookie物件
Cookie c = new Cookie(“name”,“value”)
(2)傳送給瀏覽器
respone.addCookie©;
(3)瀏覽器傳送cookie給伺服器,伺服器接收cookie
Cookie[] cookies = request.getCookies()
Session技術: 會話資料儲存在伺服器(記憶體中)
核心API:
(1)建立或得到HttpSession物件
HttpSession session = request.getSession(true) 建立或得到
HttpSession session = request.getSession(false) 得到
(2)使用HttpSession儲存和獲取,刪除會話資料
session.setAttribure(“name”,Object);
session.getAttribute(“name”);
session.removeAttrbute(“name”);
相關文章
- #魔術方法(會話管理)會話
- WebRTC 系列之音訊會話管理Web音訊會話
- 次世代的會話管理專案 Spring Session會話SpringSession
- Laravel 第七章學習——會話管理Laravel會話
- 通過 Org 模式管理 Chromium 和 Firefox 會話模式Firefox會話
- screen 命令示例:管理多個終端會話會話
- SAP Commerce Cloud UI 的使用者會話管理CloudUI會話
- 從零搭建一個IdentityServer——會話管理與登出IDEServer會話
- ABAP Webdynpro和WebClient UI不同的會話管理機制WebclientUI會話
- 利用斷開的域管理員RDP會話提權會話
- 【Shiro第七篇】SpringBoot + Shiro實現會話管理Spring Boot會話
- MQTT-會話MQQT會話
- TensorFlow學習之會話Sesstion()和互動會話InterativeSesstion()會話
- 資料庫會話數量過多,定期清理inactive會話資料庫會話
- securecrt保持會話不會斷掉Securecrt會話
- ?ORACLE會話超時Oracle會話
- DotNetCore會話探索篇NetCore會話
- mysql鎖與會話MySql會話
- Cassandra的Session會話Session會話
- 多輪對話之對話管理(Dialog Management)
- 融雲 IM SDK 整合 — 重新整理會話介面和會話列表介面會話
- Oracle阻塞會話查詢Oracle會話
- token 會話設計 (JWT)會話JWT
- 會話技術之Cookie會話Cookie
- 會話技術之 Session會話Session
- 會話跟蹤技術會話
- 使用Spring Security控制會話Spring會話
- 會話層技術-cookie會話Cookie
- 會話層技術-session會話Session
- 會說話的ABAP report
- HTTPS會話過程整理HTTP會話
- 10、flask-會話-sessionFlask會話Session
- Cobaltstrike與MSF會話派生會話
- 會話控制利器 gorilla/sessions會話GoSession
- ZooKeeper 會話的祕密會話
- 為什麼sleeping的會話會造成阻塞會話
- oracle的會話如何自殺?Oracle會話
- 在檢視中使用會話會話