cookie:客戶端技術,程序把每個用戶的數據以cookie形式寫給各自的瀏覽器,當瀏覽器再次訪問web資源時,就會帶着這些數據
session:服務端技術,服務器在運行時爲每個瀏覽器創建一個獨享的session對象,由於該session對象是用戶瀏覽器獨享,用戶就可以帶着存在對象中的數據訪問web資源
cookie{
細節:
1.一個Cookie只能標識一種信息,他至少含有包含該信息的名字name和值value
2.一個Web站點可以給瀏覽器發送多個cookie,一個瀏覽器也可以存儲多個web站點發送的cookie
3.瀏覽器一般只允許存放300個cookie,每個web站點最多存放20個cookie到一個瀏覽器,每個cookie限制爲4kb
4.如果創建了一個cookie,並將它發送給瀏覽器,默認情況下他是一個會話級別的cookie,即存儲在瀏覽器內存中,用戶退出瀏覽器之後就會被刪除。如果希望將瀏覽器將cookie存儲到硬盤上,就需要設置maxAge,並給出一個以秒爲單位的時間
5.同名的cookie會被後一個覆蓋(先將第一個刪除,在存入第二個)
基本使用:(顯示上次訪問時間)
}// 預防中文亂碼問題 response.setCharacterEncoding("UTF-8"); response.setHeader("content-type", "text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print("上次訪問的時間爲:"); // 獲得cookie,遍歷,進行安全性判斷 Cookie cookies[] = request.getCookies(); for(int i=0; cookies!=null&&i<cookies.length; i++){ // 通過名字來判斷是否爲需要的cookie數據 if(cookies[i].getName().equals("lastAccessTime")){ // 獲得存儲的時間,把字符串解析成long型的數值 long time = Long.parseLong(cookies[i].getValue()); // 封裝爲時間格式 Date date = new Date(time); out.print(date.toString()); } } // 將此時的時間寫入cookie Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+""); cookie.setMaxAge(1*30*24*3600);//設置cookie 的有效時間,秒爲單位 cookie.setPath("/web");//設置這個cookie的有效路徑, // 將cookie存到瀏覽器 response.addCookie(cookie);
session{
該對象由服務器自動創建,開發人員通過request的方法獲得session對象,再進行操作
注意:
1.服務器在瀏覽器第一次獲取session的時候自動創建session,並保存在服務器中
2.當瀏覽器被關閉的時候,session不會被摧毀。默認三十分鐘後自動摧毀未使用session
3.如果只需要得到session對象,而不需要使用session,就使用request.getSession(false);
4.ie8多個瀏覽器客戶端共享同一個session對象
// 通過第一次request創建獲取session。request.getSession(false);指定是否需要創建session HttpSession session = request.getSession(); // 給session存值。 session.setAttribute("name", "123"); // 摧毀session,或者通過修改web.xml文件 session.invalidate();
實現原理:
1.當服務器爲一個瀏覽器創建一個session之後,會將Jsessionid存到cookie內併發送給瀏覽器
2.當該瀏覽器再次訪問服務器就會使用Jsessionid來獲得服務器對應的session對象
3.存儲Jsessionid的cookie對象是沒有有效期限的,瀏覽器一被關閉就會摧毀cookie
// 保證同一瀏覽器多次訪問同一個session對象 // 1.獲取session對象,爲其存值 HttpSession session = request.getSession(); session.setAttribute("pass", "halm"); // 2.獲得該session的id號 String sessionid = session.getId(); // 3.將該id號存儲到新創建的cookie對象,並覆蓋之前默認的cookie對象 Cookie cookie = new Cookie("JSESSIONID", sessionid); cookie.setPath("/web"); cookie.setMaxAge(30*60); // 4.將cookie存儲到硬盤中 response.addCookie(cookie);
request.getSession();//需要先獲得對象,才能對地址重寫 //如果瀏覽器禁用cookie就會重寫,爲url附加上sessionid,如果瀏覽器帶着(未禁用)cookie就不會重寫,localhost不恩能重寫 String url = response.encodeURL("/web_review/index.jsp");
}
域對象:
request:顯示完數據就不要再次使用數據
session:程序產生數據,除了顯示之外還需要使用到數據
servletContext:不僅在此程序中使用,別的程序還要使用該數據(一個web應用一個該對象)