http協議是無狀態協議,當用戶發送一次請求之後,本次會話就結束了,下次再發送請求的時候,就需要服務器來確認來訪請求的身份是屬於哪個會話的,常用的2種會話跟蹤技術就是Cookie和Session,下面就這2種的用法總結一下。
Cookie:
cookie是存儲在瀏覽器上,爲同一用戶的不同請求之間的數據共享提供支持,要使用cookie,首先要在服務端進行設置,然後返回給客戶端保存,在之後的請求中,會攜帶cookie數據,服務器根據cookie中的信息確認這個身份是否正確。
使用過程:
1、新建一個cookie對象:Cookie coo = new Cookie(key,value);
2、設置cookie屬性:coo.setMaxAge(int Seconds),設置過期屬性,在該時間範圍內會自動攜帶,此時cookie保存在硬盤上;coo.setPath(uri),設置URI信息,訪問該URI時候纔會攜帶cookie信息;
3、將cookie添加到響應中返回給瀏覽器:resp.addCookie(coo);
4、解析cookie :req.getCookies() 返回cookie數組,遍歷解析
注意:
在未清除瀏覽器緩存的時候,cookie保存之後,在下次發送其他請求時,會自動攜帶cookie信息;如果設置了生效URI,會在指定的URI使用cookie,其他的不會攜帶;當瀏覽器關閉之後,重新打開訪問時,設置了過期時間的cookie還在,沒有設置的已經不再了,由此說明:未設置過期的cookie是存在於瀏覽器的運行內存中的,設置之後,存在於硬盤上的;
在清除瀏覽器的緩存後,不管是否設置過期時間,都會被清除cookie;
5、cookie 可以設置跨域共享:coo.setDomain(".baidu.com"); 設置之後,即可在以baidu.com爲結尾的網址下進行cookie共享;
6、cookie設置有效路徑:coo.setPath("/test");設置後,在/test路徑下的頁面纔有cookie權限
應用:用戶登錄後,將特定的字符放在cookie中,下次請求進來,服務器根據cookie中的內容識別是否正確;如單點登錄就是利用cookie進行的;
Session:
和cookie不同,session存放在服務器的內存中,對瀏覽器來說是透明的。session支持各種數據類型和實體類型,而cookie只支持簡單的數據類型。對服務器的內存壓力增大。
在Tomcat中,用戶第一次請求的時候,服務器會生成一個JSESSIONID放在cookie中,下次請求時,根據cookie中的值判斷是否和session.getId()相等來判斷是否同一會話。
使用方法:
HttpSession sess = request.getSesson();
sess.setAttribute("username","zhangsan");
sess.setAttribute("uuid",1212121);
獲取時:sess.getAttribute("uuid");