目錄
一、會話跟蹤技術概述
二、Cookie
1.Cookie基本原理
2.Cookie基本使用
3.Cookie存活時間
4.cookie存儲中文
三、Session
1.Session鈍化、活化
2.Session基本使用
3.sesion銷毀
四Cookie和Sesion差別
一、會話跟蹤技術概述
1.會話:使用者打開浏覽器,通路網頁資源,會話就建立了。直到有一方斷開連接配接,會話結束。在一次會話中可以包含多次請求和響應。
2.會話跟蹤:一種維護浏覽器狀态的方法,伺服器需要多次識别請求是否來自同一個浏覽器,以便在同一次會話中的多次請求共享資料。
3.為什麼要共享資料?
答:因為HTTP協定是無狀态的,每次浏覽器向伺服器請求時,伺服器都會将該請求視為新的請求,是以我們需要會話跟蹤技術來實作會話内資料共享。
4.實作方式
用戶端會話跟蹤技術:Cookie
服務端會話跟蹤技術:Session
二、Cookie
1.Cookie基本原理
cookie的實作是基于HTTP協定的
發送cookie到浏覽器:響應頭:set-cookie
攜帶cookie通路伺服器:請求頭:cookie
2.Cookie基本使用
Cookie:用戶端會話技術,将技術儲存到用戶端,以後每次請求都攜帶Cookie資料進行通路
ps:我們主要是做服務端的開發,那麼使用這個Cookie。首先就是要把這個Cookie發送到客戶浏覽器,以後客戶浏覽器就可以擷取這個Cookie去進行通路其他的Servlet。
(1)發送cookie
使用response對象
package com.project.JavaScript;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/res")
public class res extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//發送Cookie
//1.建立Cookie對象
Cookie cookie = new Cookie("username","666");
//2.發送Cookie,response
response.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
檢視方法:F12或者檢測--應用程式--檢視cookie就可以看到了(這是edge浏覽器)

(2)擷取cookie
使用request對象
package com.project.JavaScript;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/res")
public class res extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//擷取Cookie
//1.擷取Cookie數組
Cookie[] cookies = request.getCookies();
//2.周遊數組
for (Cookie cookie : cookies) {
//擷取鍵
String name = cookie.getName();
//擷取值,要先判斷一下需要的值擷取出來就好了
if ("username".equals(name)){
//擷取對應的值
String value = cookie.getValue();
//列印
System.out.println(name+":"+value);
//擷取到了對應的值就終止
break;
}
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
運作結果:控制台輸出
username:666
3.Cookie存活時間
預設情況下,cookie存儲在浏覽器記憶體中,當浏覽器關閉,記憶體釋放,則cookie被銷毀
setMaxAge(int seconds):設定cookie存活時間
1.正數:将cookie寫入浏覽器所在的電腦硬碟,持久化存儲,到時間自動删除
2.負數:預設值,cookie随着浏覽器的關閉而銷毀
3.零:删除對應的cookie
存儲七天的例子
package com.project.JavaScript;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/res")
public class res extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//發送Cookie
//1.建立Cookie對象
Cookie cookie = new Cookie("username","666");
//設定cookie存活7天 60是秒
cookie.setMaxAge(60*60*27*7);
//2.發送Cookie,response
response.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
其實就一行代碼
cookie.setMaxAge(60*60*27*7);
4.cookie存儲中文
cookie不能直接存儲中文
如果需要存儲,則要進行轉碼:URL編碼
三、Session
session是基于cookie的
服務端會話跟蹤技術:将資料儲存到服務端
JavaEE提供HttpSession接口,來實作一次會話的多次請求間資料共享功能
如果資料存儲在cookie裡面,每次通路帶來帶去,就會造成洩露的隐患,是以使用Sessoin比較好一點
1.Session鈍化、活化
伺服器在重新開機後,sesion中的資料是否還存在
鈍化:在伺服器正常關閉後,Tomacat會自動将sesion資料寫入到硬碟中
活化:再次啟動伺服器後,從檔案中加載資料到sesion中
2.Session基本使用
存儲Session
package com.project.JavaScript;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/Session1")
public class Session1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//存儲到session中
//1.擷取session對象
HttpSession session = request.getSession();
//2.存儲資料
session.setAttribute("username","KPL");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
擷取Session
package com.project.JavaScript;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.Enumeration;
@WebServlet("/Session2")
public class Session2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//擷取資料,從session中
//1.擷取session對象
HttpSession session = request.getSession();
//2.擷取資料
Object username = session.getAttribute("username");
System.out.println(username);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
運作結果為
KPL
3.sesion銷毀
預設情況下,無操作,30分鐘自動銷毀
更改為100分鐘例子
在web.xml裡面配置就好了
<session-config>
<session-timeout>100</session-timeout>
</session-config>
立即銷毀(銷毀sesion自己)
session.invalidate();
四Cookie和Sesion差別
差別:
存儲位置:cookie是将資料存儲在用戶端,sesion将資料存儲在服務端
安全性:cookie不安全,sesion安全
資料大小:cookie最大3KB,sesion無大小限制
存儲時間:cookie可以長時間存儲,sesion預設30分鐘
伺服器性能:cookie不占用伺服器資源,sesion占用伺服器資源