程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java實戰之04JavaWeb-03會話技術,java04javaweb-03

Java實戰之04JavaWeb-03會話技術,java04javaweb-03

編輯:JAVA綜合教程

Java實戰之04JavaWeb-03會話技術,java04javaweb-03


一、會話技術簡介

1.什麼是會話,為什麼需要會話技術?

會話:從打開一個浏覽器,訪問某個網站,到關閉這個浏覽器的這個過程稱為一次會話。http協議是狀態的。

2.會話技術的分類

客戶端存儲技術:Cookie

服務端存儲技術:Session

Cookie和Session的區別?

1)存儲在Cookie中的用戶的信息 存在客戶端,Session將數據存儲在服務器端,但是需要在客戶端存儲Session的編碼id

2)安全性而言 Cookie相對不安全 Session相對安全

3)性能而言:根據實際的情況

二、會話技術之Cookie

Cookie技術是將數據存儲到客戶端

1.怎樣去向客戶端寫出一個cookie

1)創建Cookie對象

Cookie cookie = new Cookie(name,value);

2)向客戶端寫出cookie

response.addCookie(cookie );

客戶端:客戶端解析http響應,響應頭中有一個cookie,客戶端會自動將cookie的信息存儲到客戶端的緩存中

2.怎樣從客戶端獲取一個Cookie

1)獲得客戶端攜帶的所有的cookie

Cookies[]  request.getCookies();

2)獲得具體的某個cookie

遍歷所有的cookie

通過getName()獲得某一個cookie的名字

通過getValue()獲得某一個cookie的值

3.設置Cookie時的細節

1)會話級別的cookie和持久級別的cookie

會話級別的cookie:會話結束cookie就清空

持久級別的cookie:會cookie存儲到磁盤上

保存在磁盤上的時間

cookie.setMaxAge(秒);

注意:如果要想刪除磁盤已經存儲的cookie

將同名的cookie的持久化時間設置為0

將要刪除的cookie的路徑設置成與磁盤上存儲的cookie的路徑一致(即兩個cookie的setPath一致)

2)設置cookie的攜帶的路徑

cookie在默認情況下 會在產生的cookie資源的所在的目錄下都攜帶

cookie.setPath(攜帶cookie的路徑);

設置cookie的攜帶路徑時以/開頭,/代表本web服務器

例如:

cookie.setPath(“/”), cookie在訪問web服務器下的所有資源的都攜帶

cookie.setPath(“/home”),在home應用時攜帶cookie

3)設置三方cookie(了解)

cookie.setDomain(域名);

三方cookie具有進攻性

4.以上代碼實現

 1         response.setContentType("text/html;charset=UTF-8");
 2         //1、創建時間的Cookie
 3         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
 4         String accessTime = format.format(new Date());
 5         Cookie cookie = new Cookie("accessTime",accessTime);
 6         //1.1 設置cookie的持久化的時間----在磁盤上存儲的時間
 7         //cookie.setMaxAge(60*10);
 8         //1.2 設置cookie的攜帶路徑  /代表web服務器
 9         cookie.setPath("/day11_208/abc/accessTime");
10         //2、將cookie寫給客戶端
11         response.addCookie(cookie);
12         //3、獲取客戶端攜帶的時間的cookie
13         String accessTime_client = null;
14         Cookie[] cookies = request.getCookies();
15         if(cookies!=null){
16             for(Cookie coo:cookies){
17                 //取出美喲個cookie對象的名字
18                 String cookieName = coo.getName();
19                 if("accessTime".equals(cookieName)){
20                     //取出該cookie的值
21                     accessTime_client = cookie.getValue();
22                 }
23             }
24         }
25         
26         //4、為用戶顯示上次訪問時間
27         if(accessTime_client!=null){
28             response.getWriter().write("您的上一次訪問時間是:"+accessTime_client);
29         }else{
30             //第一次訪問
31             response.getWriter().write("您是第一次訪問");
32         }

三、會話技術之Session

1.怎樣去創建session/獲得session

HttpSession session = request.getSession();

上述方法的內部原理:

當request在調用getSession方法時,內部會去查看一下該用戶是否在web應用的內部存在一塊內存區域,如果有直接返回這個內存區域的地址,如果沒有就創建一個新的session區域

服務器端通過什麼判斷用戶是否已經存在session的呢?

根據session的編號id--->JSESSIONID

2.session的生命周期

創建:第一次調用request.getSession()

銷毀:

1)服務器關閉 session銷毀

2)session超時 默認30分鐘

計算點從何時開始:最後一次操作該站點後的30分鐘

3)手動銷毀session

session.invalidate();

3.Session是一個域對象

Session是借助於Cookie的,同一個Session的標志就是JSESSIONID相同。

如果將浏覽器關閉,在打開訪問資源,會重新創建session

怎樣將session持久化----->存儲JSESSIONID的Cookie持久化

抓包工具獲得:

Set-Cookie: JSESSIONID=6232D4782FC69B1D780261E93DFA5FBB; Path=/day11_208/;

手動創建一個Cookie 在上面的cookie的基礎上 多一個max-age

1         //手動創建Cookie存儲JSESSIONID
2         //Set-Cookie: JSESSIONID=6232D4782FC69B1D780261E93DFA5FBB; Path=/home/;
3         Cookie cookie = new Cookie("JSESSIONID",session.getId());
4         cookie.setPath("/home/");
5         cookie.setMaxAge(60*10);
6         
7         response.addCookie(cookie);

如果客戶端禁用Cookie,客戶端不能在存儲Cookie,JSESSIONID丟失,解決?

解決方案:URL重寫,在每個url地址後都使用分號;拼接JSESSIONID

1         HttpSession session = request.getSession();
2         System.out.println(session.getId());
3         String url = "/home/index.jsp";
4         url = response.encodeRedirectURL(url);
5         System.out.println(url);
6         response.sendRedirect(url);

http://localhost/home/index.jsp;jsessionid=377B2F0501FF9FE643D7D88F4E883FFD

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved