1. 程式人生 > >cookie的基礎以及小案例

cookie的基礎以及小案例

腳本元素 direct his 常用 變量 所有 arr 編譯 date

1.會話技術

  

用戶打開一個瀏覽器訪問頁面,訪問網站的很多頁面,訪問完成後將瀏覽器關閉的過程稱為是一次會話
cookie:將數據保存到客戶端瀏覽器
session:將數據保存到服務器端

向瀏覽器保存數據:
response.addCookie(Cookie cookie)
獲取瀏覽器帶過來的數據:
request.getCookies();
創建cookie對象:
cookie(String name,String value);

2.JSP的簡單概述

jsp:java代碼+html的元素+jsp內置的東西
jsp的執行過程:
jsp會被翻譯成servlet,編譯成class進行執行
jsp的腳本元素:
<%! %>:翻譯成類中的成員部分,定義變量,定義方法,定義類,Servlet是線程不安全的,盡量少在類中定義成員變量
<% %>:翻譯成類的service方法內部的內容,定義變量,定義類,直接寫代碼塊
<%= %>:翻譯成service方法內部的out.print();

3.記錄用戶的上次登錄訪問時間

public class ServletDemo1 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取當前時間
        String time = new Date().toLocaleString();
        
//獲得所有cookie Cookie[] cookies = request.getCookies(); //遍歷cookies判斷有沒有記錄登錄時間的cookie if(cookies != null) { for (Cookie cookie : cookies) { //如果匹配到保存時間的cookie,用戶不是第一次訪問 if(cookie.getName().equals("visitTime")) { String visitTime
= cookie.getValue(); response.getWriter().write("歡迎回來,上次訪問的時間是:"+cookie.getValue()); } } }else { response.getWriter().write("歡迎訪問本網站!"); } //創建cookie對象保存 Cookie c = new Cookie("visitTime", time); //發送cookie response.addCookie(c); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

4.cookie常用的api

getName();獲得名字
getValue();獲得對應的值
setDomain(String domain);設置cookie的有效域名
setPath(String path);設置cookie的有效路徑
setMaxAge(int maxAge);設置cookie的有效時間

5.cookie的分類

會話級別的cookie:默認的cookie,關閉瀏覽器cookie就會銷毀
持久級別的cookie:可以設置cookie的有效時間,那麽關閉瀏覽器cookie還會存在,手動銷毀持久性Cookie.setMaxAge(0);

6.商品的瀏覽歷史記錄

步驟:
點擊某個商品,將商品ID傳遞給一個Servlet
在Servlet中判斷是否是第一次瀏覽商品
如果是第一次:將商品ID存入到cookie中
如果不是,判斷商品是否被瀏覽過,如果瀏覽過,就 刪除對應的cookie,添加到首尾,沒有就判斷是否達到瀏覽商品顯示的最大值,
如果沒有就直接添加到第一個,如果達到了就刪除最後一個,再添加都首位

public class ServletDemo2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收用戶點擊商品傳遞過來的id
        String id = request.getParameter("id");
        //獲得所有的cookie信息
        Cookie[] cookies = request.getCookies();
        //判斷有沒有瀏覽過這個商品
        Cookie cookie = CookieUtils.findCookie(cookies,id);
        //用戶是第一次瀏覽
        if(cookie == null) {
            //創建cookie對象
            Cookie c = new Cookie("history", id);
            //設置一個小時的銷毀
            cookie.setMaxAge(60*60);
            //發送cookie
            response.addCookie(c);
            //用戶不是第一次瀏覽
        }else {
            //得打cookie的值
            String value = cookie.getValue();
            //切掉在拼接cookie時的,號
            String[] ids = value.split(",");
            //將數組轉換成集合
            List<String> aslist = Arrays.asList(ids);
            //將list轉換成linkedlist
            LinkedList<String> list = new LinkedList<>(aslist);
            //如果用戶之前瀏覽過這個商品
            if(list.contains(id)) {
                //刪除對應的
                list.remove(id);
                list.addFirst(id);
                //沒有瀏覽過
            }else {
                //判斷是否達到最大值
                if(list.size() < 3) {
                    //直接添加到第一個
                    list.addFirst(id);
                    //達到最大值
                }else {
                    //刪除最後一個
                    list.removeLast();
                    list.addFirst(id);
                }
            }
            //創建拼接的StringBuffer
            StringBuffer sb = new StringBuffer();
            for(String s:list) {
                sb.append(s).append(",");
            }
            //去掉最後一個,號
            String idValue = sb.toString().substring(0,sb.length()-1);
            //保存到cookie中
            Cookie c = new Cookie("history", idValue);
            //發送
            response.addCookie(c);
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
class CookieUtils {

    public static Cookie findCookie(Cookie[] cookies,String name){
        if(cookies == null){
            return null;
        }else{
            for(Cookie cookie:cookies){
                if(name.equals(cookie.getName())){
                    return cookie;
                }
            }
            
            return null;
        }
    }
}

7.清空瀏覽歷史記錄

點擊清空瀏覽歷史記錄的超鏈接,
跳轉到servlet
得到指定保存瀏覽歷史記錄的cookie,
設置保存時間為0
重定向到商品顯示頁面

public class Demo3Servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲得所有的cookie
        Cookie[] cookies = request.getCookies();
        //遍歷cookies,拿到保存瀏覽歷史記錄的cookie
        for (Cookie cookie : cookies) {
            if(cookie.getName().equals("history")) {
                //設置保存時間為0
                cookie.setMaxAge(0);
            }
        }
        //重定向
        response.sendRedirect(request.getContextPath()+"/list.jsp");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

cookie的基礎以及小案例