java web視訊學習-Cookie

言凡_發表於2019-03-24

餅乾. 其實是一份小資料, 是伺服器給客戶端,並且儲存在客戶端上的一份小資料

應用場景:自動登入、瀏覽記錄、購物車。

為什麼要有這個Cookie:

http的請求是無狀態, 客戶端與伺服器在通訊的時候,是無狀態的,客戶端在第二次訪問伺服器時,伺服器不知道它之前訪問過。
為了更好的使用者體驗,更好的互動 [自動登入],其實從公司層面講,就是為了更好的收集使用者習慣[大資料]

Cookie的簡單使用

服務端新增cookie響應給給客戶端,cookie在此處產生

response.setContentType("text/html;charset=utf-8");
Cookie cookie = new Cookie("name", "wangcf");
response.addCookie(cookie);
response.getWriter().write("你好呀!!");

服務端獲取客戶端請求中的cookie
在客戶端獲取到cookie以後,再次訪問伺服器,瀏覽器會自動在請求中新增cookie

Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie coo: cookies) {
        String name = coo.getName();
        String value = coo.getValue();
        System.out.println("name=" + name + ";value=" + value);
    }
}

設定cookie的有效期
預設關閉瀏覽器後失效,
設定cookie的有效期

預設值:-1,或其它負數,關閉瀏覽器後失效;
0,response返回到瀏覽器後即被刪除,下次request將不會傳輸該cookie;
其它正數,存在多少秒,超過該秒後的request將無該cookie

//cookie的設定必須在addCookie之前才有效
cookie.setMaxAge(60 * 60 * 24);
response.addCookie(cookie);

修改cookie值

cookie.setValue(newValue);

設定cookie在瀏覽器的存放地址;該地址下有cookie,則request將帶上該cookie

//只有訪問pattern域名的request才回帶cookie
cookie.setDomain(pattern);
//是有訪問以上域名的uri的路徑才會帶cookie
cookie.setPath(uri);

image.png

cookie實戰

例項一、顯示最近訪問的時間。

  1. 判斷賬號是否正確
  2. 如果正確,則獲取cookie。 但是得到的cookie是一個陣列, 我們要從陣列裡面找到我們想要的物件。
  3. 如果找到的物件為空,表明是第一次登入。那麼要新增cookie
  4. 如果找到的物件不為空, 表明不是第一次登入。
if ("admin".equals(userName) && "123".equals(password)) {
    //獲取cookie last-name --- >
    Cookie[] cookies = request.getCookies();

    //從陣列裡面找出我們想要的cookie,自定義findCookie方法
    Cookie cookie = CookieUtil.findCookie(cookies, "last");

    //是第一次登入,沒有cookie
    if (cookie == null) {

        Cookie c = new Cookie("last", System.currentTimeMillis() + "");
        c.setMaxAge(60 * 60); //一個小時
        response.addCookie(c);

        response.getWriter().write("歡迎您, " + userName);

    } else {
        //1. 去以前的cookie第二次登入,有cookie
        long lastVisitTime = Long.parseLong(cookie.getValue());

        //2. 輸出到介面,
        response.getWriter().write("歡迎您, " + userName + ",上次來訪時間是:" + new Date(lastVisitTime));

        //3. 重置登入的時間
        cookie.setValue(System.currentTimeMillis() + "");
        response.addCookie(cookie);
    }
} else {
    response.getWriter().write("登陸失敗 ");
}

例項二、顯示商品瀏覽記錄。

  1. 邏輯分析:

img03.png

  1. jsp 裡面使用Java程式碼
  • jsp

Java Server Pager —> 最終會翻譯成一個類, 就是一個Servlet
存放在Tomcat的work目錄下面,最終是通過拼寫輸出HTML頁面

  • 定義全域性變數
<%! int a = 99; %>
  • 定義區域性變數
<% int b = 999; %>
  • 在jsp頁面上,顯示 a 和 b的值,
<%= a %> 
<%= b %>
  1. jsp顯示瀏覽記錄

img04.png

  1. 清除瀏覽記錄

其實就是清除Cookie, 刪除cookie是沒有相應的類似delete方法的
可以設定maxAge 為0 。

Cookie cookie = new Cookie("history","");
cookie.setMaxAge(0); //設定立即刪除
cookie.setPath("/CookieDemo02");
response.addCookie(cookie);

相關文章