cookie
客戶端(瀏覽器)保存信息的技術(shù)
http協(xié)議是無狀態(tài)的,每次都是基于一個請求一個響應(yīng).每次請求和響應(yīng)都跟上次沒有關(guān)系.我們需要記錄之前對話信息.
usage
添加cookie到瀏覽器
1>新建一個cookie(鍵值對)
Cookie cookie = new Cookie("name", "tom");
2>將cookie 添加到響應(yīng)中
response.addCookie(cookie)
瀏覽器發(fā)送cookie到服務(wù)器,如何取
1>獲得所有瀏覽器發(fā)送的cookie
Cookie[] cookies = request.getCookies();
2>遍歷并判斷我們要找的cookie
if(cookies!=null && cookies.length>0){
for(Cookie c : cookies){
if(c.getName().equals("name")){
System.out.println("獲得的cookie:"+c.getName()+":"+c.getValue());
}
}
}
cookie原理.
讓瀏覽器記住鍵值對.是向響應(yīng)頭中添加一下頭即可:
set-Cookie:name=tom;
瀏覽器記住之后,向服務(wù)器發(fā)送鍵值對,是在請求頭中添加下面的信息:
Cookie: name=tom;
cookie細(xì)節(jié)問題:
1.瀏覽器記多久?
默認(rèn)是在會話期間有效.(關(guān)閉瀏覽器,cookie就被刪除).(有效時間-1)
2.有效時間如何設(shè)置?
//設(shè)置cookie的最大有效時間
1>設(shè)置一個正數(shù),標(biāo)示最大有效時間.單位是秒
//cookie.setMaxAge(60*60);
2>設(shè)置為-1 , 就是相當(dāng)于默認(rèn)有效時間, 瀏覽器關(guān)閉就消失.
//cookie.setMaxAge(-1);
3> 標(biāo)示cookie的有效時間為0.發(fā)送到瀏覽器就消失了.
//利用有效時間為0 這件事,我們可以做刪除cookie的操作.
// 因為同一個路徑 ,不能存在相同的cookie(鍵相同).
// 我們可以通過覆蓋的方式,設(shè)置有效時間為0. 刪除cookie
cookie.setMaxAge(0);
3.瀏覽器在什么情況下發(fā)送cookie(路徑)
cookie的默認(rèn)路徑就是發(fā)送cookie的servlet所在目錄.
/Day09-cookie
/Day09-cookie/abc/xxxServlet
訪問路徑如果是cookie路徑的子路徑那么,瀏覽器就會把該cookie告訴服務(wù)器.
4.cookie中的域 (了解)
想要以下三個 主機(jī)和主機(jī)下的項目能共享一個cookie.
www.baidu.com
music.baidu.com
map.baidu.com
完成兩步即可:
1.設(shè)置cookie的域為 ".baidu.com"
2.設(shè)置cookie路徑 為: "/"
以上就是跨主機(jī)訪問cookie.不常用.
session
服務(wù)器端保存會話信息的技術(shù).
怎么用
1 如何獲得session(HttpServletRequest request)
HttpSession session = request.getSession();
2 如何操作session
細(xì)節(jié)問題
重新登陸場景
1.關(guān)閉瀏覽器
2.一段時間回來
服務(wù)器讓瀏覽器記住sessionID的cookie 默認(rèn)過期時間是 (-1)
==> 關(guān)閉瀏覽器 cookie就丟失
==> cookie丟失 sessionID就丟失
==> 找不到服務(wù)器的session
關(guān)于設(shè)置session的最大有效時間
1.修改在tomcat的web.xml中 <session-config> ==> 影響服務(wù)器中的所有項目
2.在項目的web.xml中 加入<session-config> 配置.==> 影響的是當(dāng)前項目
3.通過setMaxInactiveInterval(int interval)方法設(shè)置.==> 當(dāng)前操作的session