會話管理:管理瀏覽器和服務器之間會話過程當中產生的會話數據。
Cookie技術:會話數據保存到瀏覽器客戶端。【存 編號/標記(id)】
Session技術:會話技術會保存到服務器端(內存)。 【存 具體值】html
一、服務器端建立cookie對象
Cookie cookie=new Cookie(「name」,」value」);
二、設置Cookie
void setPath(java.lang.String uri)
void setMaxAge(int expiry)
void setValue(java.lang.String newValue)
三、把cookie發送給瀏覽器端;
Response.addCookie(cookie);
四、 瀏覽器帶着cookie信息訪問服務器(經過請求頭:)
Cookie[] cookies=request.getCookies(); //服務器接收cookie數據
侷限:
一、只能保存字符串數據,不能保存中文
二、一個cookie不能超過4kbjava
1)服務器建立cookie對象,把會話數據存儲到cookie對象中
New Cookie(「name」,」value」);
2)服務器發送cookie到瀏覽器
Response.addCookie(cookie);
3)瀏覽器獲得服務器發送的cookie,而後在保存到瀏覽器端
Cookie:name=rose(隱藏帶着叫cookie名稱的請求頭)
4)服務器接收到瀏覽器帶來的cookie信息
Request.getCookies();web
1)SetPath:設置cookie的有效路徑。有效路徑指保存到哪裏,那麼瀏覽器在有效的路徑下方訪問是就帶有cookie信息,不然就不帶。
2)setMaxAge(int time):設置cookie的有效時間。
正整數:表示cookie]數據保存到瀏覽器的緩衝目錄(硬盤中),數值表示保存的時間。
負整數:表示cookie保存瀏覽器的內存中,瀏覽器關閉cookie就丟失。
零:表示刪除同名的cookie數據
3)cookie數據類型值能保存非中文的數據類型。能夠保存cookie,可是瀏覽器通常只容許放300個cookie,每一個站點最多隻能放20個Cookie,每一個cookie的大小限制4Kb瀏覽器
例1緩存
1 package com.shore.cookie; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.Cookie; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 /* 12 * 第一個cookie的程序 13 * */ 14 public class CookieDemo1 extends HttpServlet { 15 16 public void doGet(HttpServletRequest request, HttpServletResponse response) 17 throws ServletException, IOException { 18 19 /*request.setAttribute("name","hello"); 20 request.getRequestDispatcher("GetData").forward(request, response);*/ 21 //建立Cookie對象 22 Cookie cookie1=new Cookie("name","rose"); 23 //Cookie cookie2=new Cookie("email","1314@qq.com"); 24 /* 25 * 1)設置Cookie的有效路徑:默認狀況下,有效路徑在當前的web應用下./MyCookie 26 * cookie.setPath("/MyCookie") 27 * */ 28 //cookie1.setPath("/MyCookie2"); 29 //response.addCookie(cookie2); 30 /* 31 * 2)設置cookie的有效時間 32 * 正數:表示cookie保存到瀏覽器的緩存目錄(硬盤中),數值表示保存時間 33 * 負整數:表示cookie數據保存瀏覽器的內存中.瀏覽器關閉cookie就失效!! 34 * 零:表示刪除同名的cookie數據 35 * */ 36 cookie1.setMaxAge(100); 37 //cookie2.setMaxAge(30);//5秒 從最後步調用cookie開始計算的 38 //cookie1.setMaxAge(-1); 39 response.addCookie(cookie1); 40 Cookie[] cookies=request.getCookies(); 41 if(cookies!=null){ 42 for (Cookie c : cookies) { 43 String name=c.getName(); 44 String value=c.getValue(); 45 System.out.println("name="+name+";value="+value); 46 } 47 }else{ 48 System.out.println("沒有接收到cookie數據"); 49 } 50 } 51 }
例2服務器
1 package com.shore.cookie; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.Cookie; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 public class GetData extends HttpServlet { 12 13 public void doGet(HttpServletRequest request, HttpServletResponse response) 14 throws ServletException, IOException { 15 /*String name=(String)request.getAttribute("name"); 16 System.out.println(name);*/ 17 Cookie[] cookies=request.getCookies(); 18 /*if(cookies!=null){ 19 for (Cookie c : cookies) { 20 String name=c.getName(); 21 String value=c.getValue(); 22 System.out.println("name="+name+";value="+value); 23 } 24 }else{ 25 System.out.println("沒有接收到cookie數據"); 26 }*/ 27 } 28 }
例3cookie
1 package com.shore.cookie; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.Cookie; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 public class DeleteCookie extends HttpServlet { 12 13 public void doGet(HttpServletRequest request, HttpServletResponse response) 14 throws ServletException, IOException { 15 16 /* 17 * 需求:刪除Cookie 18 * */ 19 Cookie cookie=new Cookie("name", "xxxx"); 20 cookie.setMaxAge(0);//刪除同名cookie 21 response.addCookie(cookie); 22 System.out.println("刪除成功"); 23 } 24 }
一、建立和獲得Session對象
HttpSession session=Request.getSession(); //建立或者獲得Session對象
Request.getSession(false); //獲得session對象
二、會話數據保存Session對象中,和獲得會話數據
Session.setAttribute(「name」,Object); //保存數據
Session.getAttribute(「name」); //獲得數據
注意:
一、session.setMaxInactiveInterval(時間); //設置session過去時間
二、session.invalidate(); //手動銷燬session對象session
一、getId():獲得session編號
二、兩個getSession方法
1)getSession()/getSession(true):建立或獲得session對象。沒有匹配的session編號時,會自動建立新的session對象。
2)getSession(false):獲得session對象。沒有匹配的session編號時,返回null。
三、session對象銷燬的時間
3.一、自動銷燬session對象
1)默認狀況下,爲30分鐘,過期 瀏覽器會自動回收
2)修改(設置)session的回收時間。
3)全局修改
spa
<!-- 修改session的全局有效時間:分鐘 --> <session-condig> <session-timeout>時間數字</session-timeout> </session-condig> |
3.二、手動銷燬session對象
1)直接調用invalidate();方法3d
SessionDemo1.java文件
1 package com.shore.session; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.Cookie; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import javax.servlet.http.HttpSession; 11 12 /** 13 * @author DSHORE / 2018-9-9 14 * 15 */ 16 public class SessionDemo1 extends HttpServlet { 17 18 public void doGet(HttpServletRequest request, HttpServletResponse response) 19 throws ServletException, IOException { 20 21 //建立session對象 22 HttpSession session=request.getSession(); 23 //建立cookie對象 24 Cookie c=new Cookie("JSESSIONID",session.getId());//鍵值對 25 session.setMaxInactiveInterval(10); //設置Session的有效時間爲10秒 26 c.setMaxAge(60*60);//3600秒 27 response.addCookie(c);//把值添加到瀏覽器的cookie中 28 session.setAttribute("name","Jack"); 29 System.out.println(session.getId()+"---->SessionDemo1的值"); 30 } 31 }
SessionDemo2.java文件
1 package com.shore.session; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 import javax.servlet.http.HttpSession; 10 11 /** 12 * @author DSHORE / 2018-9-9 13 * 14 */ 15 public class SessionDemo2 extends HttpServlet { 16 17 public void doGet(HttpServletRequest request, HttpServletResponse response) 18 throws ServletException, IOException { 19 20 //建立session對象 21 HttpSession session=request.getSession(false); 22 if(session!=null){ 23 String sessionName=(String)session.getAttribute("name"); 24 System.out.println(sessionName); 25 System.out.println(session.getId()); 26 }else{ 27 System.out.println("id不對"); 28 } 29 } 30 }
結果圖
實例解析:
一、第一次訪問建立的session對象時,給session對象分配一個惟一的id,叫JSESSIONID。
HttpSession session=request.getSession();
二、把JSESSIONID做爲cookie的值發送給瀏覽器保存。
Cookie c=new Cookie("JSESSIONID",session.getId());
response.addCookie(c);//把值添加到瀏覽器的cookie中
三、第二次訪問的時候,瀏覽器帶着JSESSIONID的cookie訪問服務器。
四、服務器獲得JSESSIONID,並在服務器的內存中搜索是否存在對應編號(id)的session對象。
if(session!=null){
String sessionName=(String)session.getAttribute("name");
System.out.println(sessionName);
System.out.println(session.getId());
}else{
System.out.println("id不對");
}
五、若是找到對應編號的session對象,則直接返回該對象。
六、若是找不到對應編號的session對象,則建立新的session對象,循環第1到底6步(驟)。
結論:經過cookie(瀏覽器端的請求頭)中的JSESSIONID編號,去服務器中尋找session對象對應的值。
原創做者:DSHORE 做者主頁:http://www.cnblogs.com/dshore123/ 原文出自:http://www.javashuo.com/article/p-xrczxyir-bn.html 歡迎轉載,轉載務必說明出處。(若是本文對您有幫助,能夠點擊一下右下角的 推薦,或評論,謝謝!) |