Session和Cookie

  因爲http協議無狀態,須要用session記錄客戶狀態,如購物車場景,服務端爲用戶建立特定session,用於標識並跟蹤用戶
  服務端保存session的方法不少,內存,數據庫,文件都有
  集羣時考慮session的轉移,大型網站會有專門的session服務器集羣來保存用戶會話,這個時候session通常存放在內存web


服務端如何識別特定的客戶?

  每次http請求,客戶端會發送響應cookie到服務器,大多數應用用cookie來實現session跟蹤的
  第一次建立session時,服務端會在http協議告訴客戶端,須要在cookie類裏記錄一個session id,之後每次請求會發送這個id到數據庫,我就知道你是誰了
  若是瀏覽器禁用了cookie,能夠url重寫來進行會話跟蹤數據庫


  Cookie登錄場景,登錄過一次網站,第二次訪問不須要輸入帳號密碼自動登錄,就是把信息寫到Cookie裏,訪問網站的時候,網站頁面的腳本讀取Cookie,自動幫你把用戶名填寫了瀏覽器

Cookie

cookie機制

cookie內容tomcat

CookieAPI

建立和發送cookie服務器

@WebServlet("/sendCookie")
public class sendCookie extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //建立cookie
        Cookie cookie=new Cookie("name","zqf");//只能存字符串,和域對象不同
        //發送cookie到客戶端
        response.addCookie(cookie);
    }
}

第一次訪問能夠看到響應頭包含cookie,發送給客戶端cookie


第二次訪問能夠看到請求頭也包含了cookie,是服務器端發送到客戶端保存的session



cookie是會話級別,也就是說瀏覽器開始到關閉,關閉瀏覽器時cookie則消失,可是有時候爲何沒有消失呢,是由於給cookie設置了在客戶端的持久化時間 網站

設置cookie持久化時間url

cookie.setMaxAge(10*60*1000);
 設置cookie在瀏覽器中存儲時間爲10分鐘,到時間自動刪除cookie信息

設置cookie攜帶路徑spa

cookie.setPath("/");訪問服務器下全部資源都攜帶這個cookie
cookie.setPath("/項目名/當前頁面");則訪問當前頁面才攜帶cookie

刪除cookie.

@WebServlet("/removeCookie")
public class removeCookie extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //刪除客戶端保存name-xxx的cookie信息
        Cookie cookie=new Cookie("name","");
        //設置時間爲0
        cookie.setMaxAge(0);
        response.addCookie(cookie);
    }
}

獲取cookie

@WebServlet("/getCookie")
public class getCookie extends HttpServlet {
    //得到cookie的值
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        for(Cookie cookie:cookies) {
            String cookieName = cookie.getName();
            if(cookieName.equals("name")) {
                String cookieValue = cookie.getValue();
                System.out.println(cookieValue);
            }
        }
    }
}

Session

session技術是基於cookie,cookie技術存儲session編號--jsessionid

session機制

session是一種服務度機制,相似散列表結構來存儲用戶數據
瀏覽器第一次向客戶端發送請求時,服務器會自動生成一個session和sessionid
sessionid惟一標識這個session
服務器響應時把sessionid發送給瀏覽器
瀏覽器第二次向服務器發送請求時就會攜帶這個sessionid
服務器經過這個id找到對應的session獲取用戶數據


session缺點

cookie被禁止,session也會被禁止,能夠經過url重寫擺脫託cookie

Cookie經過在客戶端記錄信息肯定用戶身份,Session經過在服務器端記錄信息肯定用戶身份
Session數據放在服務器上,Cookie數據存放在客戶的瀏覽器上

session的生命週期

生命週期

建立    
    第一次執行request.getSession()時建立
銷燬
    服務器(非正常)關閉
    Session過時
        tomcat下web.xml自動配置
    手動銷燬
        session.invalidate();

服務器關閉,session就銷燬了嘛?

不對,有時間的,看session是否過時

session和cookie區別

session保存在服務器,cookie保存在客戶端
session中保存的時對象,cookie保存的是字符串
session不能區分路徑,同一個用戶訪問一個網站期間,全部的session在任何一個地方均可以訪問
cookie若是設置路徑,則在某些地方不能訪問
session須要藉助cookie才能正常工做,若是禁用cookie,session則失效
客戶端會在發送請求的時候,自動將本地存活的cookie封裝在信息頭髮送給服務器

session和cookie應用場景

session上下文機制,針對每個用戶,經過sessionid來區分不一樣客戶
session是以cookie或url重寫爲基礎的,默認使用cookie實現,系統會創造一個名爲jsessionid的輸出cookie
重要狀態走session,不重要走cookie,登錄信息用session,購物車用cookie
相關文章
相關標籤/搜索