Cookie
cookie是由服務器生成,通過response將cookie寫回瀏覽器(set-cookie),保留在瀏覽器上,
下一次訪問,瀏覽器根據一定的規則攜帶不同的cookie(通過request的頭 cookie),我們服務器就可以接受cookie
cookie的api:
new Cookie(String key,String value)
寫回瀏覽器:
response.addCookie(Cookie c)
獲取cookie:
Cookie[] request.getCookies()
cookie的常用方法:
getName():獲取cookie的key(名稱)
getValue:獲取指定cookie的值
cookie-總結:
常用方法:
setMaxAge(int 秒):設置cookie在瀏覽器端存活時間 以秒爲單位
若設置成 0:刪除該cookie(前提必須路徑一致)
setPath(String path):設置cookie的路徑.
當我們訪問的路徑中包含此cookie的path,則攜帶
默認路徑:
訪問serlvet的路徑,從"/項目名稱"開始,到最後一個"/"結束
例如:
訪問的serlvet路徑:
/day11/a/b/hello
默認路徑爲:
/day11/a/b
手動設置路徑:以"/項目名"開始,以"/"結尾;
// 例如使用cookie記錄上次訪問時間
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.設置編碼
response.setContentType("text/html;charset=utf-8");
PrintWriter w = response.getWriter();
//1.獲取指定名稱的cookie
Cookie c=getCookieByName("lastTime",request.getCookies());
//2.判斷cookie是否爲空
if(c == null){
//cookie爲空 提示 第一次訪問
w.print("您是第一次訪問!");
}else{
//cookie不爲空 獲取value 展示 上一次訪問的時間
String value = c.getValue();// lastTime=12312324234
long time = Long.parseLong(value);
Date date = new Date(time);
w.print("您上次訪問時間:"+date.toLocaleString());
}
//3.將當前訪問時間記錄
//3.1創建cookie
c=new Cookie("lastTime",new Date().getTime()+"");
//持久化cookie
c.setMaxAge(3600);
//設置路徑
c.setPath(request.getContextPath()+"/");// /day11/
//3.2寫回瀏覽器
response.addCookie(c);
}
Session
session:
服務器端會話技術.
當我們第一次訪問的服務器的時候,服務器獲取id,
能獲取id
要拿着這個id去服務器中查找有無此session
若查找到了:直接拿過來時候,將數據保存,需要將當前sessin的id返回給瀏覽器
若查找不到:創建一個session,將你的數據保存到這個session中,將當前session的id返回給瀏覽器
不能獲取id
創建一個session,將你的數據保存到這個session中,將當前session的id返回給瀏覽器
獲取一個session:
HttpSession request.getSession()
域對象:
xxxAttribute
生命週期:
創建:第一次調用request.getsession()創建
銷燬:
服務器非正常關閉
session超時
默認時間超時:30分鐘 web.xml有配置
手動設置超時:setMaxInactiveInterval(int 秒) 瞭解
手動幹掉session
★session.invalidate()
存放的私有的數據.
// 例如使用session記錄用戶添加的購物車,當然實際不會使用session這麼做,這只是個例子
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.設置編碼
response.setContentType("text/html;charset=utf-8");
PrintWriter w = response.getWriter();
//1.獲取商品的名稱
String name=request.getParameter("name");
name=new String(name.getBytes("iso8859-1"),"utf-8");
//2.將商品添加到購物車
//2.1 從session中獲取購物車
Map<String,Integer> map=(Map<String, Integer>) request.getSession().getAttribute("cart");
Integer count=null;
//2.2判斷購物車是否爲空
if(map==null){
//第一次購物 創建購物車
map=new HashMap<>();
//將購物車放入session中g
request.getSession().setAttribute("cart", map);
count=1;
}else{
//購物車不爲空 繼續判斷購物車中是否有該商品
count = map.get(name);
if(count==null){
//購物車中沒有該商品
count=1;
}else{
//購物車中有該商品
count++;
}
}
//將商品放入購物車中
map.put(name, count);
//3.提示信息
w.print("已經將<b>"+name+"</b>添加到購物車中<hr>");
w.print("<a href='"+request.getContextPath()+"/product_list.jsp'>繼續購物</a> ");
w.print("<a href='"+request.getContextPath()+"/cart.jsp'>查看購物車</a> ");
}
關於cookie和session,還可以參考我的另一篇文章的講解https://blog.csdn.net/lizhengwei1989/article/details/75570954