1. Cookie
客戶端會(huì)話技術(shù),將數(shù)據(jù)保存到客戶端
基于響應(yīng)頭的set-cookie和請(qǐng)求頭的cookie實(shí)現(xiàn)
Cookie cookie = new Cookie("msg","hello-world");
// cookie.setMaxAge(100);//正數(shù):將cookie數(shù)據(jù)寫(xiě)到硬盤(pán)文件中,持久化存儲(chǔ),存活時(shí)間 example:100秒
// cookie.setMaxAge(0);//刪除cookie
// cookie.setMaxAge(-1);//負(fù)數(shù):默認(rèn) 關(guān)閉瀏覽器則清空
// cookie.setPath("/");//設(shè)置共享范圍,因?yàn)槟J(rèn)cookie只在當(dāng)前的虛擬目錄下共享
// cookie.setDomain(".baidu.com");//設(shè)置一級(jí)域名相同 cookie可以在多個(gè)服務(wù)直接共享
resp.addCookie(cookie);
// cookie的特點(diǎn)和作用:
// 1.cookie存放在客戶端瀏覽器
// 2.對(duì)于大小有限制(一般<4kb),以及同一個(gè)域名下cookie的數(shù)量也有限制(一般<20)
// 作用:
// 1.用于存放少量不太敏感的數(shù)據(jù)
// 2.不登錄情況下,對(duì)客戶端的身份校驗(yàn)
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
System.out.println(cookieName + " " + cookieValue);
}
Demo
//解決中文亂碼問(wèn)題
// resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
if (lastTimeValue != null) {
// 編解碼可以防止一些合法字符的問(wèn)題 比如 空格
resp.getWriter().write("歡迎登錄,您上次登錄時(shí)間為 " + URLDecoder.decode(lastTimeValue,"utf-8"));
} else {
resp.getWriter().write("歡迎您首次登錄!");
}
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
lastTimeValue = localDateTime.format(dateTimeFormatter);
resp.addCookie(new Cookie(lastTimeKey, URLEncoder.encode(lastTimeValue,"utf-8")));
2. Session
服務(wù)器端會(huì)話技術(shù),在一次會(huì)話的多次請(qǐng)求間共享數(shù)據(jù),將數(shù)據(jù)保存在服務(wù)器端的對(duì)象中,HttpSession
基于cookie的JSESSIONID查找內(nèi)存中存儲(chǔ)的對(duì)象
HttpSession session = req.getSession();
String o = (String)session.getAttribute("go");
System.out.println(o);
session.setAttribute("go","123");
//session.removeAttribute("go");
//如何保證瀏覽器關(guān)閉之后依然拿到指定的session
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60*24);//一天有效
resp.addCookie(cookie);
//session會(huì)在服務(wù)器關(guān)閉時(shí)銷毀
//session調(diào)用invalidate()自毀
//session默認(rèn)失效時(shí)間30分鐘 可以在配置文件中修改session-timeout
//tomcat在服務(wù)器關(guān)閉時(shí)會(huì)將session鈍化(服務(wù)器正常關(guān)閉之前會(huì)將數(shù)據(jù)序列化到硬盤(pán)上),啟動(dòng)后會(huì)活化(將session文件轉(zhuǎn)化為內(nèi)存中的session對(duì)象)
3. 區(qū)別
1.cookie在客戶端,session在服務(wù)端
2.cookie有大小限制,session沒(méi)有,session可以存儲(chǔ)任意類型
3.cookie相對(duì)不安全,session數(shù)據(jù)安全