1. 程式人生 > 實用技巧 >Servlet-Cookie物件

Servlet-Cookie物件

概述

servlet-api 4.0.1版本

常用方法

public Cookie(String name, String value) {...} // 構造具有指定名稱和值的cookie

public String getName() {...} // 返回cookie的名稱。 建立後不能更改名稱

public String getValue() {...} // 獲取此Cookie的當前值

public void setValue(String newValue) {...} // 為該Cookie分配一個新值

public void setMaxAge(int expiry) {...} // 設定此Cookie的最長使用期限(以秒為單位)

public int getMaxAge() {...} // 獲取此Cookie的最長使用期限(以秒為單位)

public void setComment(String purpose) {...} // 指定描述cookie用途的註釋

public String getComment() {...} // 返回描述此cookie用途的註釋;如果cookie沒有註釋,則返回null

public void setDomain(String domain) {...} // 指定該cookie應在其中顯示的域

public String getDomain() {...} // 獲取此Cookie的域名

public void setPath(String uri) {...} // 指定客戶端應向其返回cookie的cookie的路徑

public String getPath() {...} // 返回瀏覽器向其返回此cookie的伺服器上的路徑。 該cookie對伺服器上的所有子路徑可見

public void setSecure(boolean flag) {...} // 向瀏覽器指示cookie是否僅應使用安全協議(例如HTTPS或SSL)傳送

public boolean getSecure() {...} // 判斷瀏覽器是否通過安全協議傳送cookie

public int getVersion() {...} // 返回此cookie遵循的協議的版本

public void setVersion(int v) {...} // 設定此cookie遵循的協議的版本

public void setHttpOnly(boolean isHttpOnly) {...}

public boolean isHttpOnly() {...}

獲取上次訪問時間

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    Cookie[] cookies = request.getCookies();
    // 第一次訪問瀏覽器時cookie為null
    if (cookies == null) {
        out.print("這是你第一次訪問");
        Cookie cookie = new Cookie("LastAccessTime", System.currentTimeMillis() + "");
        cookie.setMaxAge(10); // 設定cookie失效時間(視窗不關閉一直有效),設定-1失效
        response.addCookie(cookie); // 新增cookie
    } else {
        // 第n次訪問
        for (Cookie cookie : cookies) {
            if ("LastAccessTime".equals(cookie.getName())) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                out.print("上次訪問時間:" + sdf.format(new Date(Long.parseLong(cookie.getValue()))));
                cookie.setValue(System.currentTimeMillis() + ""); // 修改cookie的值
                response.addCookie(cookie); // 更新cookie
                break;
            }
        }
    }
}

儲存中文

Cookie的name和value都不能使用中文,如果希望在Cookie中使用中文,那麼需要先對中文進行URL編碼,然後把編碼後的字串放到Cookie中

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    Cookie[] cookies = request.getCookies();
    // 第一次訪問瀏覽器時cookie為null
    if (cookies == null) {
        Cookie cookie = new Cookie("name", URLEncoder.encode("張三", "UTF-8"));
        response.addCookie(cookie); // 新增cookie
    } else {
        // 第n次訪問
        for (Cookie cookie : cookies) {
            if ("name".equals(cookie.getName())) {
                out.print(URLDecoder.decode(cookie.getValue(), "UTF-8"));
                break;
            }
        }
    }
}