JavaWeb基礎(6):Cookie & Session
阿新 • • 發佈:2018-12-13
(一)會話
(1)資料儲存
- HTTP協議是一種無狀態協議
- 使用者在上次訪問過程中產生的資料可以通過會話技術儲存
- 會話技術分為兩種
- Cookie
- Session
(二)Cookie
(1)定義
-
Cookie是指網站為了辨別使用者身份而儲存在本地終端(Client)上的資料
- Cookie是瀏覽器端會話技術
- Cookie的定義:Cookie儲存在客戶端
- Cookie的工作流程:瀏覽網頁時,伺服器把Cookie傳送到使用者端,下次訪問相同網站時,伺服器就能通過Cookie判斷是否是以前的使用者訪問
-
構造方法
Cookie cookie = new Cookie(String name, String value); //建立一個新的Cookie:名稱-對應值,儲存的都是String型別
(2)用法
- 使用Cookie,可以將使用者訪問伺服器的時間儲存到Cookie
- 記錄使用者的上次訪問時間
- 儲存使用者的瀏覽記錄
setMaxAge(int n) 設定Cookie在瀏覽器中的存活時間(單位為s)
(3)歷史記錄
- 使用Cookie儲存瀏覽器訪問的記錄
- 每次訪問頁面時將記錄新增到字串中,生成新的Cookie
- 使用jsp頁面獲取Cookie,提取之後展示在主頁
- 清空歷史記錄
- 建立一個clearHistory的Servlet
- 建立一個同名的Cookie(路徑以及key和儲存歷史記錄的Cookie相同)
- response.addCookie(新Cookie) 用來覆蓋原有的Cookie
(三)Session
- Sesssion(會話)是一種持久化網路協議
- Session是伺服器端會話技術
- Session物件由伺服器建立
(1)生命週期
request.getSession() //獲取一個Session(HttpSession)物件
- 建立:呼叫request.getSession()方法
- 銷燬
- session超時:預設時間為30min(在tomcat的web.xml中可檢視)
- 手動銷燬:session.invalidate()
(2)購物車功能
Map<String, Integer> map = (Map<String,Integer>) request.getSession().getAttribute("cart");
Integer count = 1;
if(map == null){ //購物車為空,建立一個新的購物車
map = new HashMap<String,Integer>();
request.getSession().setAttribute("cart",map); //首次建立Session物件中的cart Attribute
} else{
count = map.get(name);
if(count == null){
count = 1;
} else {
count++;
}
}
map.put(name,count);
- 清空購物車
- invalidate方法
public class ClearCart extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.設定編碼
response.setContentType("text/html;charset=UTF-8");
//1.清空session
request.getSession().invalidate();
//2.重定向
response.sendRedirect(request.getContextPath()+"/cart.jsp");
}
}