會話技術Cookie&Session,,,Cookie技術
會話技術Cookie&Session
從開啟一個瀏覽器訪問某個站點,到關閉這個瀏覽器的整個過程,成為一次會話。會話技術就是記錄這次會話中客戶端的狀態與資料的。
會話技術分為Cookie和Session:
Cookie:資料儲存在客戶端本地,減少伺服器端的儲存的壓力,安全性不好,客戶端 可以清除cookie
Session:將資料儲存到伺服器端,安全性相對好,增加伺服器的壓力
一、Cookie技術
1.伺服器端向客戶端傳送一個Cookie
1)建立Cookie:
Cookie cookie = new Cookie(String cookieName,String cookieValue);
示例:
Cookie cookie = new Cookie("username","zhangsan");
那麼該cookie會以響應頭的形式傳送給客戶端:
注意:Cookie中不能儲存中文
2)設定Cookie在客戶端的持久化時間:
cookie.setMaxAge(int seconds); ---時間秒
注意:如果不設定持久化時間,cookie會儲存在瀏覽器的記憶體中,瀏覽器關閉 cookie資訊銷燬(會話級別的cookie),如果設定持久化時間,cookie資訊會 被持久化到瀏覽器的磁碟檔案裡
示例:
cookie.setMaxAge(10*60);
設定cookie資訊在瀏覽器的磁碟檔案中儲存的時間是10分鐘,過期瀏覽器 自動刪除該cookie資訊
3)設定Cookie的攜帶路徑:
cookie.setPath(String path);
注意:如果不設定攜帶路徑,那麼該cookie資訊會在訪問產生該cookie的 web資源所在的路徑都攜帶cookie資訊
示例:
cookie.setPath("/WEB16");
代表訪問WEB16應用中的任何資源都攜帶cookie
cookie.setPath("/WEB16/cookieServlet");
代表訪問WEB16中的cookieServlet時才攜帶cookie資訊
4)向客戶端傳送cookie:
response.addCookie(Cookie cookie);
5)刪除客戶端的cookie:
如果想刪除客戶端的已經儲存的cookie資訊,那麼就使用同名同路徑的持久化時 間為0的cookie進行覆蓋即可
//建立Cookie物件,不能用漢字 Cookie cook=new Cookie("name","zhangsan"); //設定Cookie持久化時間 cook.setMaxAge(2*60);//兩分鐘 //設定攜帶路徑 cook.setPath("/WEB05");//WEB05上的資源都可以訪問 //傳送Cookie物件 response.addCookie(cook);
/WEB05產生的cook物件
/WEB05/SendCookieServlet產生
/WEB05/index.jsp可以訪問
/WEB05/aaa/demo01.jsp可以訪問
/WEB05/aaa/SendCookieServlet產生
/WEB05/aaa/demo01.jsp 可以訪問
/WEB05/index.jsp 無法訪問
刪除Cookie物件(使用同名同路徑的持久化時 間為0的cookie進行覆蓋即可)
//建立Cookie物件 Cookie cook=new Cookie("name","zhangsan"); //設定路徑 cook.setPath("/WEB05"); //設定時間 cook.setMaxAge(0); //傳送Cookie物件 response.addCookie(cook);
伺服器端怎麼接受客戶端攜帶的Cookie
cookie資訊是以請求頭的方式傳送到伺服器端的
1)通過request獲得所有的Cookie:
Cookie[] cookies = request.getCookies();
2)遍歷Cookie陣列,通過Cookie的名稱獲得我們想要的Cookie
for(Cookie cookie : cookies){
if(cookie.getName().equal(cookieName)){
String cookieValue = cookie.getValue();
}
}
//獲取Cookie所在的陣列 Cookie[] cook=request.getCookie(); //遍歷 for(Cookie c:cook){ if(c.getName().equals("name")){ String cookieValue=c.getValue();//Cookie陣列key值為name所對應的value值 } }
使用者訪問第二次顯示上次訪問時間
//獲取當前時間 Date date=new Date(); //轉年月日格式 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //Date型別轉字串 String curr=sdf.formart(date); //建立Cookie物件 Cookie cook=new Cookie("time",curr);//curr訪問時的時間 //設定初始化訪問時間 cook.setMaxAge(10*60); //傳送Cookie物件 response.addCookie(cook); //獲取Cookie所在陣列 Cookie[] cookie=request.getCookie(); //如果數組裡沒有值預設為null String time=null; if(cookie!=null){//判斷陣列內是否有值 for(Cookie cc:cookie){//遍歷陣列 if(cc.getName.equies("time")){ time=cc.getValue();//獲取Value值,就是上次的時間 }}} //判斷是否是第一次登入 //解決亂碼 response.setContentType("text/html;charset=UTF-8"); if(time==null){ response.getWriter().writer("第一次訪問"); }else{ response。getWrite().write("上次訪問時間:"+time) }