Cookie是服務器發送到客戶端並保存在本地的一小塊數據,它會在客戶端下次向同一服務器再發起請求時被攜帶併發送到服務器上。一般,它用於告知服務端兩個請求是否來自同一瀏覽器,如保持用戶的登陸狀態。Cookie 使基於無狀態的 HTTP 協議記錄穩定的狀態信息成爲了可能。cookie中的數據以{key:value}的形式存在。前端
好比服務端要想記錄用戶的狀態,就使用response向瀏覽器發送一個Cookie。客戶端瀏覽器會將這個cookie保存起來。瀏覽器再次請求服務端時,瀏覽器會把這個cookie帶上。服務端檢查這個cookie來獲取用戶狀態。瀏覽器
name cookie的名字,Cookie一旦建立,名稱便不可更改安全
value cookie的值bash
domain 能夠訪問該cookie的域名。若是設置爲「.baidu.com」,則全部以「baidu.com」結尾的域名均可以訪問該Cookie;第一個字符必須爲「.」服務器
maxAge Cookie失效的時間,單位秒。 正數,則超過maxAge秒以後失效。 負數,該Cookie爲臨時Cookie,關閉瀏覽器即失效,瀏覽器也不會以任何形式保存該Cookie。 爲0,表示刪除該Cookie。cookie
isHttpOnly HttpOnly屬性是用來限制非HTTP協議程序接口對客戶端Cookie進行訪問,將取Cookie的操做放到服務端,這樣能有效的防止XSS攻擊。session
Cookie cookie = new Cookie("cookieSessionId","qwertyuiop"); //構造函數
cookie.setDomain(".baidu.com"); // 設置域名
cookie.setPath("/"); // 設置路徑
cookie.setMaxAge(Integer.MAX_VALUE); // 設置有效期爲永久
response.addCookie(cookie); // 回寫到客戶端
複製代碼
Cookie自己並無提供修改和刪除的方法,通常經過使用相同name的Cookie來覆蓋原來的Cookie,以達到更新或刪除的目的。併發
Cookie cookie = new Cookie("cookieSessionId","new-qwertyuiop");
response.addCookie(cookie);
Cookie cookie = new Cookie("cookieSessionId","new-qwertyuiop");
cookie.setMaxAge(0);//設置一個當即失效的cookie覆蓋原cookie
response.addCookie(cookie);
複製代碼
//服務端從客戶端取得cookie
Cookie[] cookies = request.getCookies();
//服務端向客戶端發送cookie
response.addCookie(cookie);
複製代碼
對於Cookie來講,Cookie的同源只關注域名,是忽略協議和端口的。因此通常狀況下,https://localhost:80和http://localhost:8080的Cookie是共享的。單個 Cookie 保存的數據不能超過 4K。dom
Session 表明着服務器和客戶端一次會話的過程。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當客戶端關閉會話,或者 Session 超時失效時會話結束。函數
當客戶端請求建立一個session時,服務端會先檢查客戶端的請求裏面有沒有帶着session標識-sessionId。若是有,則說明服務器之前已爲此客戶端建立過session,因而就根據這個sessionId把session檢索出來。若是客戶端請求中不包含sessionId,則爲客戶端建立一個session而且生成一個與這個session相關聯的sessionId。 這個sessionId將被在本次響應中返回給客戶端保存。保存sessionId的方式大多狀況下用的是cookie。
HttpSession session = request.getSession();
一隻努力加載進度條的小前端,若是有錯誤,歡迎在評論中留言指正~