會話技術 cookie and session

會話技術:

    會話:瀏覽器訪問服務器端,發送屢次請求,接受屢次響應。直到有一方斷開鏈接。會話結束。
    
    解決問題:能夠使用會話技術,在一次會話的屢次請求之間共享數據。
        
    分類:
        客戶端會話技術    Cookie
        服務器端會話技術    Session
數組

 

  客戶端會話技術:Cookie 小餅乾的意思

        服務器端不須要管理,方便。可是不安全。
        
        原理:
            1.客戶端第一次請求服務器端,服務器做出響應時,會發送set-cookie頭,攜帶須要共享的數據
            2.當客戶端接受到這個響應,會將數據存儲在客戶端
            3.當客戶端再次請求服務器端時,會經過cookie請求頭攜帶着存儲的數據。
            4.服務器接受帶請求,會獲取客戶端攜帶的數據。
        
        Java代碼實現:
            1.發送cookie
                //1.建立Cookie對象。
                Cookie c = new Cookie("name","zhangsan");
                //2.經過response發送cookie
                response.addCookie(c);
                
            2.接收cookie
                //1.獲取全部cookie數組
                Cookie[] cs = request.getCookies();
                //2.遍歷數組
                if(cs != null){
                    for (Cookie c : cs) {
                        //獲取cookie的名稱
                        String name = c.getName();
                        //判斷名稱,獲得目標cookie
                        if("name".equals(name)){
                            //獲取值
                            String value = c.getValue();
                            System.out.println(name+":"+value);
                        }
                    }
                }
        
        Cookie的細節:
            1.默認狀況下,cookie保存在客戶端瀏覽器內存中。
              須要將數據持久化存儲在客戶端的硬盤上。
              設置cookie的存活時間。setMaxAge(int s);
             
            2.Cookie是不支持中文數據的。若是要想存儲中文數據。須要轉碼。
                URL編碼
        
        功能:記住用戶名和密碼瀏覽器


        服務器端會話技術:Session  主菜的意思
        
        服務器端須要管理數據,麻煩,可是安全。
        
        原理:
            1.客戶端訪問服務器端,在服務器端的一個對象(Session)中存儲了數據
            2.服務器給客戶端做出響應時,會自動將session對象的id經過響應頭 set-cookie:jsessionid=xxx 發送到客戶端
            3.客戶端接受到響應,將頭對應的值存儲到客戶端
            4.客戶端再次請求時,會攜帶着請求頭 cookie:jsessionid=xxx.
            5.服務器接受到請求,經過jsessionid的值,找到對應的session對象。就能夠獲取對象中存儲的數據了。
            
            Session技術依賴於cookie。
        
        獲取session
            HttpSession session = request.getSession();
        
        域對象:
            setAttribute():
            getAttribute():
            removeAttribute():
        
        session細節:
            1.客戶端關閉了,兩次session同樣嗎?
                不同。由於客戶端瀏覽器內存釋放了,jsessionid沒了。
              服務器關閉了,兩次session同樣嗎?
                不同。由於服務器內存釋放了,session對象沒了。
                    session的鈍化:
                        當服務器正常關閉時,會將session對象寫入到服務器的硬盤上。
                    session的活化:
                        當服務器正常啓動時,會將session文件還原爲session對象
        
            2.session對象的銷燬
                1.session超時
                    <session-config>
                        <session-timeout>30</session-timeout>
                    </session-config>
                
                2.invalidate():session銷燬
                
                3.服務器關閉。
                
            3.session依賴於cookie,若是客戶端禁用了cookie,那麼session該咋辦?
                URL重寫。安全

         
            4.getSession方法的重載:
                boolean:
                    true:默認值
                        經過id查找session,若是沒找到,新建立一個
                    false:
                        經過id查找session,若是沒找到,返回null
                        第一次建立一個新的對象服務器

相關文章
相關標籤/搜索