JAVA基礎之會話技術-Cookie及Session

  至此,學習Servlet三個域對象:ServletContext(web項目)、request(一次請求)、Session(一個客戶端)!均有相同的方法!html

  從用戶開始打開瀏覽器進行操做,便開始了一次會話,直相當閉瀏覽器爲止結束。在此過程當中,每次產生請求時均會產生一次cookie,同時會產生一個JESSIONID進入到客戶端進行建立內存空間,下次調用直接尋找此惟一的ID值。數據存儲在兩個地方均有利弊!須要注意的是,瀏覽器關閉,session並無銷燬!web

1、會話技術簡介:數組

一、存儲客戶端的狀態:瀏覽器

  由於Http協議是無狀態的,也就是說每一個客戶訪問服務器端資源時,服務器並不知道該客戶端是誰,因此須要會話技術識別客戶端的狀態。安全

會話技術是幫助服務器記住客戶端狀態(區分客戶端)服務器

二、會話技術:cookie

①、從打開一個瀏覽器訪問某個站點,到關閉這個瀏覽器的整個過程,成爲一次會話。會話技術就是記錄此次會話中客戶端的狀態與數據的。session

②、會話技術分爲Cookie 和Session:學習

Cookie:數據存儲在客戶端本地,減小服務器端的存儲的壓力,安全性很差,客戶端能夠清楚cookie.spa

Session:將數據存儲到服務器端,安全性相對好,增長服務器的壓力。

2、Cookie技術:

一、服務器向客戶端發送一個Cookie(不能存中文)

Cookie cookie=new Cookie(String name,String value)

二、設置cookie在客戶端的持久化時間:

cookie.setMaxAge(int seconds)

若是不設置持久化時間,cookie會存儲到瀏覽器的內存中,瀏覽器關閉時cookie信息銷燬。設置了的話,會在規定的時間內存在。

三、設置cookie的攜帶路徑:

cookie.setPath(String path)

若是不設置攜帶路徑,cookie信息在訪問 產生 該cookie的web資源所在的路徑 都攜帶cookie信息。

四、向客戶端發送cookie

response.addCookie(Cookie cookie)

五、刪除客戶端的cookie

使用同名同路徑的持久化時間爲0的cookie進行覆蓋

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //建立Cookie對象
        Cookie cookie= new Cookie("godds","naiping");
        //設置持久化時間(從請求Servlet開始) 
        cookie.setMaxAge(60*2);
        //設置cookie攜帶路徑(只有訪問此路徑才攜帶)
        //cookie.setPath("/WEB07/SendCookieServlet");
        /*cookie.setPath("/WEB07");
        cookie.setPath("/");*/
        //發送
        response.addCookie(cookie);
    }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //刪除Cookie
         Cookie cookie = new Cookie("goods","naiping");
         cookie.setMaxAge(0);
         response.addCookie(cookie);
    }

六、服務器接收客戶端攜帶cookie的方式:

以請求頭的方式發送到服務器端的

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取cookie數組
        Cookie[] cookies = request.getCookies();
        //遍歷cookie數組經過cookie名獲取cookie值
        for(Cookie c:cookies){
            if(c.getName().equals("goods")){
                System.out.println(c.getValue());
            }
        }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取當前的時間對象
        Date date = new Date();
        //建立日期轉換類對象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
        //將日期對象轉爲字符串
        String time = sdf.format(date);
        //建立cookie對象,記錄當前訪問時間
        Cookie cookie = new Cookie("lastTime",time);
        cookie.setMaxAge(60*10);
        //發送cookie
        response.addCookie(cookie);
        //接收cookie
        Cookie[] cookies = request.getCookies();
        //定義變量存儲上次訪問時間
        String lastTime = null;
        //遍歷
        for(Cookie c:cookies){
            if(c.getName().equals("lastTime")){
                lastTime=c.getValue();
            }
        }
        //解決響應亂碼
        response.setContentType("text/html;charset=utf-8");
        if(lastTime==null){
            //第一次訪問
            response.getWriter().write("您是第一次訪問");
        }else{
            response.getWriter().write("您上次訪問時間爲"+lastTime);
        }
    }

 

 

3、Session技術:(一個域對象)

一、簡介:

  Session技術是將數據存儲在服務器端的技術,會爲每一個客戶端都建立一塊內存空間 存儲客戶的數據,但客戶端須要每次都攜帶一個標識ID去服務器中尋找屬於本身的內存空間。因此說Session的實現是基於Cookie,Session須要藉助於Cookie存儲客戶的惟一性標識JSESSIONID。

二、得到Session對象:

HttpSession session = request.getSession()

  此方法會得到專屬於當前會話(當前客戶端)的Session對象,若是服務器端沒有該會話的Session對象會建立一個新的Session返回,若是已經有了屬於該會話的Session直接將已有 的Session返回(實質就是根據JSESSIONID判斷該客戶端是否在服務器上已經存在session了)

三、域對象的存取數據;

四、生命週期:

①、建立:

    第一次執行 request.getSession() 時建立

②、銷燬:

    服務器非正常關閉時;

    Session 過時、失效(默認30分鐘)

    手動銷燬Session

③、做用範圍:

  默認在一次會話中,也就是說,在一次會話中任何資源公用一個session對象。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取Session域中的內容
        HttpSession session = request.getSession();
        //獲取Session中的內容
        String goods = (String)session.getAttribute("goods");
        //解決亂碼
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write(goods);
    }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取Session對象
        HttpSession session = request.getSession();
        //向Session域中存儲數據(cookie不能存漢字)
        session.setAttribute("goods", "奶瓶");
        //獲取JESSIONID
        String id = session.getId();
        //設置持久化時間---建立一個新的cookie設置其時間並覆蓋原來的
        //建立Cookie
        Cookie cookie = new Cookie("JSESSIONID",id);
        cookie.setPath("/WEB08");
        cookie.setMaxAge(60*3);
        //發送cookie
        response.addCookie(cookie);
        response.getWriter().write("JSESSIONID:"+id);
        //結果 JSESSIONID:0CDD85B8A6E216CA5BDA8E9729D5F230
        
    }
相關文章
相關標籤/搜索