1. 程式人生 > >java基礎79 會話管理(Cookie技術、Session技術)

java基礎79 會話管理(Cookie技術、Session技術)

1、概念

    會話管理:管理瀏覽器和伺服器之間會話過程中產生的會話資料。
    Cookie技術:會話資料儲存到瀏覽器客戶端。存 編號/標記(id)
    Session技術:會話技術會儲存到伺服器端(記憶體)。 【存 具體值】

2、Cookie技術(會話資料儲存到瀏覽器客戶端)

2.1、Cookie的核心API

   1、伺服器端建立cookie物件
        Cookie cookie=new Cookie(“name”,”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[] cookies=request.getCookies(); //伺服器接收cookie資料
 侷限:


    1、只能儲存字串資料,不能儲存中文
    2、一個cookie不能超過4kb

2.2、Cookie原理

   1)伺服器建立cookie物件,把會話資料儲存到cookie物件中
        New Cookie(“name”,”value”);
   2)伺服器傳送cookie到瀏覽器
        Response.addCookie(cookie);
   3)瀏覽器得到伺服器傳送的cookie,然後在儲存到瀏覽器端
        Cookie:name=rose(隱藏帶著叫cookie名稱的請求頭)
   4)伺服器接收到瀏覽器帶來的cookie資訊
        Request.getCookies();

2.3、Cookie的細節

    1)SetPath:設定cookie的有效路徑。有效路徑指儲存到哪裡,那麼瀏覽器在有效的路徑下方訪問是就帶有cookie資訊,否則就不帶。
    2)setMaxAge(int time):設定cookie的有效時間。
        正整數:表示cookie]資料儲存到瀏覽器的緩衝目錄(硬碟中),數值表示儲存的時間。
        負整數:表示cookie儲存瀏覽器的記憶體中,瀏覽器關閉cookie就丟失。
               零:表示刪除同名的cookie資料
    3)cookie資料型別值能儲存非中文的資料型別。可以儲存cookie,但是瀏覽器一般只允許放300個cookie,每個站點最多隻能放20個Cookie,每個cookie的大小限制4Kb

2.4、例項

例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","[email protected]");
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 }

例3

 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 }

3、Session技術(會話資料儲存到伺服器端[記憶體])

3.1Session的核心API

    1、建立和得到Session物件
        HttpSession session=Request.getSession(); //建立或者得到Session物件
        Request.getSession(false); //得到session物件
    2、會話資料儲存Session物件中,和得到會話資料
        Session.setAttribute(“name”,Object); //儲存資料
        Session.getAttribute(“name”); //得到資料
  注意:
      1、session.setMaxInactiveInterval(時間); //設定session過去時間
      2、session.invalidate(); //手動銷燬session物件

3.2、session細節

    1、getId():得到session編號
    2、兩個getSession方法
        1)getSession()/getSession(true):建立或得到session物件。沒有匹配的session編號時,會自動建立新的session物件。
        2)getSession(false):得到session物件。沒有匹配的session編號時,返回null。
   3、session物件銷燬的時間
       3.1、自動銷燬session物件
            1)預設情況下,為30分鐘,過時 瀏覽器會自動回收
            2)修改(設定)session的回收時間。
            3)全域性修改

          <!-- 修改session的全域性有效時間:分鐘 -->
          <session-condig>
                  <session-timeout>時間數字</session-timeout>
          </session-condig>

      3.2、手動銷燬session物件
           1)直接呼叫invalidate();方法

3.3、例項

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 }

結果圖

       

例項解析:
1、第一次訪問建立的session物件時,給session物件分配一個唯一的id,叫JSESSIONID。
    HttpSession session=request.getSession();
2、把JSESSIONID作為cookie的值傳送給瀏覽器儲存。
    Cookie c=new Cookie("JSESSIONID",session.getId());    
    response.addCookie(c);//把值新增到瀏覽器的cookie中
3、第二次訪問的時候,瀏覽器帶著JSESSIONID的cookie訪問伺服器。
4、伺服器得到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不對");
    }
5、如果找到對應編號的session物件,則直接返回該物件。
6、如果找不到對應編號的session物件,則建立新的session物件,迴圈第1到底6步(驟)。

結論:通過cookie(瀏覽器端的請求頭)中的JSESSIONID編號,去伺服器中尋找session物件對應的值。

相關推薦

java基礎79 會話管理Cookie技術Session技術

1、概念     會話管理:管理瀏覽器和伺服器之間會話過程中產生的會話資料。    Cookie技術:會話資料儲存到瀏覽器客戶端。【存 編號/標記(id)】    Session技術:會話技術會儲存到伺服器端(記憶體)。 【存 具體值】 2、Cookie技術(會話資料儲存到瀏覽器客戶端) 2.1、Cookie

JavaWeb 會話管理cookie

Cookie原理                                      1)伺服器建立cookie物件,把會話資料儲存到cookie物件中。                    

java基礎 第二章上控制語句循環語句

pri def 註意 第二章 末尾 死循環 out 源代碼 cas 一、控制語句 1.if //格式 if(boolean){ 方法體; //boolean為true執行方

Java基礎之IO流位元組流字元流記憶體流帶快取的流序列化和反序列化

File類:File類提供了對檔案的操作,可以通過字串或URI來構建一個File類物件。通過物件,可以實現檔案的建立(createNewFile)、刪除(delete)、獲得檔名(getName)、獲得父目錄物件(getParentFile)、獲得父目錄名稱(

【PHP基礎】PHP教程錯誤處理異常處理

檢測 pen 沒有 border adding The 16px 之前 family 1、錯誤處理 在 PHP 中,默認的錯誤處理很簡單。一條消息會被發送到瀏覽器,這條消息帶有文件名、行號以及一條描述錯誤的消息。 在創建腳本和 web 應用程序時,錯誤處理是一個重要

Java匯入匯出Excel表格xls版本xlsx版本

自己整合成的一個專門匯入匯出工具類 一、pom檔案導包: <!-- 匯入匯出Excel表格 --> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <depend

Git 標籤管理建立標籤操作標籤

【什麼是標籤】 通常,釋出一個版本時,會在版本庫中打一個標籤(tag),這樣,就唯一確定了打標籤時刻的版本。將來無論什麼時候,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。所以,標籤也是版本庫的一個快照。 簡單理解:標籤是某個版本的別名,因為Git的版本號都是用一串字母數字組

Java中的引用型別強引用弱引用和垃圾回收

Java中的引用型別和垃圾回收 強引用Strong References   強引用是最常見的引用:   比如: StringBuffer buffer = new StringBuffer();   建立了一個StringBuffer類的物件,並用一個變數buffer儲存對這個

java佇列--先進先出迴圈佇列鏈佇列

佇列: 只允許在一端進行插入操作(隊尾),在另一端進行刪除操作(隊頭)。 佇列的特徵就是: 先進先出。 佇列的思想及實現也同樣非常簡單。在生活中的各種常常都需要排隊進行,鍵盤中快取區、作業系統中的作業排程等都有用到佇列先進先出的思想。在這裡同樣用一個示意圖展示佇列的基本思想

Java 關於支付的實現微信支付寶

在開發中我們經常會使用到支付功能,目前國內使用頻率高的支付方式有微信支付和支付寶支付,apple pay和三星pay沒有深入研究過,我們暫時不考慮這兩個支付。 下面我們來先講講支付的基本流程 A、客戶端發起支付訂單     不管是web端還是手機端,發起訂單是都有對你發起的

面試題整理--java中的引數傳遞值傳遞引用傳遞

java中的值傳遞和引用傳遞: 值傳遞:(形式引數型別是基本資料型別和String):方法呼叫時,實際引數把它的值傳遞給對應的形式引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是兩個不同的儲存單元,所以方法執行中形式引數值的改變不影響實際引數的值。 引用傳遞:(

java獲取json檔案內容url方式本地方式

因為工作原因需要讀取json檔案,最先是使用url方式不符合要求pass。又使用本地方式讀取。記錄一下方便後期檢視。 注:因為資料都是從網上摘抄,如有問題請告知我。 1.url方式 /**

Java中的會話管理——HttpServlet,Cookies,URL Rewriting

資源 gets where pre 點擊 相關 商品 另一個 格林尼治 參考谷歌翻譯,關鍵字直接使用英文,原文地址:http://www.journaldev.com/1907/java-session-management-servlet-httpsession-url-

javaweb學習總結(十一)——使用Cookie進行會話管理

緩存 利用 iter() 自然 web har oca main end 一、會話的概念   會話可簡單理解為:用戶開一個瀏覽器,點擊多個超鏈接,訪問服務器多個web資源,然後關閉瀏覽器,整個過程稱之為一個會話。  有狀態會話:一個同學來過教室,下次再來教室,我們會知道這個

jsp,el表示式,會話管理cookiesession技術session的建立和銷燬/清空購物車

第一部分:jsp入門和el表示式入門 1、jsp的入門 1.1 什麼是jsp: (1)sun公司用於動態網站開發技術 servlet ,因為使用servlet如果向頁面輸出內容很麻煩, 有了jsp,使用jsp向頁面輸出內容很方便,jsp就是servl

詳細探討和整理一下 java會話管理CookieSession

java的會話管理:Cookie和Session1.什麼是會話此處的是指客戶端(瀏覽器)和服務端之間的資料傳輸。例如使用者登入,購物車等會話管理就是管理瀏覽器客戶端和服務端之間會話過程產生的會話資料常用的會話技術之前學會了域物件的作用,所以在會話管理的時候也可以使用域物件的概

關於0基礎磁盤管理gpt UEFI...)最好的一篇文章(來自gentoo linux)

blog book wiki mark size hand jsb handbook gen 放鏈接:https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Disks 順便幾張圖

JAVA基礎——編程練習

選擇 解析 技術 符號 分享 內容 count1 小練習 turn 熟悉String方法的使用之判斷文件名是否合法 學習之余,寫個小練習來鞏固一下String的方法應用。 任務: 1、判斷用戶選擇要輸入的內容的類型 2、如果是java文件,輸出“您輸入的是java文件名”

Java基礎——GUI編程

perf on() paint 禁用 layout 文件 .cn 窗體 .text 繼前面的,這篇主要記錄菜單和文件對話框的兩個小練習,來熟悉一下方法的應用,一些簡單的邏輯和Swing的相關簡介,以及關於GUI基礎的記錄。 一、創建一個菜單 import java.awt

java——多線程管理concurrent包

ack 多個 block 單個 images 接口 創建線程 固定 。。 先上兩張圖,左邊一個是concurrent包下的所有接口,右邊是該包下的所有類,其實我們經常用到的接口和類都是少數的,接下來將具體介紹。 1. 常用的接口 Callable: 一個帶有返回值的線程接