cookie
Cookie 數(shù)據(jù)是由客戶端來保存和攜帶的,所以稱之為客戶端技術
屬性
Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");
name 名稱不能唯一確定一個Cookie。路徑可能不同。
value 不能存中文财松。
-
path 默認值是寫Cookie的那個程序的訪問路徑
http://localhost:8082/firstweb/cookie1- path 就是firstweb/cookie1
- 客戶端在訪問服務器另外資源時,根據(jù)訪問的路徑來決定是否帶有著Cookie到服務器
- 當前訪問的路徑如果是以cookie的path開頭的路徑纱控,瀏覽器就帶辆毡,否則不帶
-
maxAge: cookie的緩存時間,默認是-1(默認存在瀏覽器的內存中)其徙,單位是秒
- 負數(shù):cookie 的數(shù)據(jù)存在瀏覽器緩存中
- 0: 刪除胚迫。路徑要保持一致,否則可能刪錯人唾那。
- 正數(shù): 緩存(持久化到磁盤上)的時間
添加cookie
//獲取到cookie
Cookie[] cookies = request.getCookies();
if(cookies == null) {
out.write("您還沒有訪問過");
}
for(int i=0;cookies !=null && i<cookies.length;i++) {
if("lastAccessTime".equals(cookies[i].getName())) {
Long l = Long.parseLong(cookies[i].getValue());
System.out.println("過期時間:"+cookies[i].getMaxAge());
out.write("您最后訪問的時間為:"+new Date(l).toLocaleString()+"<a href='/firstweb//clear/cookie1' target= '_blank'>clear</a>");
}
}
Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");
//設置緩存時間5分鐘
cookie.setMaxAge(60*5);
//設置緩存目錄
cookie.setPath(request.getContextPath());
//返回cookie
response.addCookie(cookie);
刪除cookie
Cookie[] cookies = request.getCookies();
for(int i=0;cookies !=null && i<cookies.length;i++) {
if("lastAccessTime".equals(cookies[i].getName())) {
Cookie cookie = cookies[i];
cookie.setValue("");
//刪除
cookie.setMaxAge(0);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
out.write("lastAccessTime 已經(jīng)清空了" );
}
}
HttpSession
HttpSession 用途
- 它也是一個域對象:session servletContext request
- 同一個會話下访锻,可以使一個應用的多個資源共享數(shù)據(jù)
- cookie 客戶端技術,只能存字符串闹获。HttpSession服務器端的技術期犬,它可以存對象
常用方法
把數(shù)據(jù)保存在HttpSession對象中,該對象也是一個域對象
setAttribute(String name,Object value)
getAttribute(String name)
remvoeArrtibute(String name)
getId()
setMaxInactiveInterval(int interval) 設置session的存活時間 單位秒
invalidate() 銷毀session
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter(" name");
String age = request.getParameter("age");
HttpSession session = request.getSession();
//name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(name);
session.setAttribute("name", name);
session.setAttribute("age", age);
//10秒失效
session.setMaxInactiveInterval(10);
PrintWriter out = response.getWriter();
out.write("sessionId = "+session.getId()+" name= "+name );
getSession() 內部執(zhí)行原理
- 1,獲取名稱為JSESSIONID的cookie的值
- 2避诽,沒有這樣的cookie龟虎,創(chuàng)建一個新的HttpSession對象,分配一個唯一的SessionId,并且向客戶端寫了一個名為JSESSIONID=sessionId的cookie
- 3,有這樣的Cookie沙庐,獲取cookie的值(即HttpSession對象的值)鲤妥,從服務器的內存中根據(jù)Id找那個HttpSession對象
找到了:取出繼續(xù)為你服務
找不到:從2開始