淺談cookie技術

淺談cookie技術

Javaweb編程中有一種方法稱之爲Cookie,在百度百科中,這樣給cookie下定義:java

Cookie,有時也用其複數形式 Cookies。類型爲「小型文本文件」,是某些網站爲了辨別用戶身份,進行Session跟蹤而儲存在用戶本地終端上的數據(一般通過加密),由用戶客戶端計算機暫時或永久保存的信息。web

根據以上內容,也不難理解。cookie原意是「小餅乾」,這又跟小餅乾有什麼關係呢?cookie還有一項含義是「網絡餅乾」,網絡餅乾(網絡或互聯網使用者發給中央服務器信息的計算機文件),這樣就好理解了。編程

也能夠將cookie理解爲一封信件:某客戶端第一次訪問服務器時,服務器寫了一封信給客戶端(信上的內容是訪問時間、訪問對象等等),等到客戶端下一次來訪問服務器時,客戶端就會帶着這封信,這樣服務器就知道這個客戶端上次來過了,而且很清楚地瞭解上次訪問的具體時間,本次訪問結束以後,服務器又把這封信拿過來,更新爲本次訪問的信息。簡單說,就是這樣的一個過程。服務器

cookie是一種客戶端技術!cookie

示例

簡單編寫一個cookie的應用:網絡

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
//保存用戶上一次訪問的時間
public class CookieDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解決中文亂碼問題
        req.setCharacterEncoding("GBK");
        resp.setCharacterEncoding("GBK");
        PrintWriter out = resp.getWriter();
        //服務器端從客戶端獲取cookie
        Cookie[] cookies = req.getCookies();
        //判斷cookie是否存在
        if (cookies!=null){
            out.write("您上次訪問本網站的時間是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                String cookieName = cookie.getName();   //獲取cookie的名字
                if (cookieName.equals("LastLoginTime")){
                    long llt = Long.parseLong(cookie.getValue()); //獲取cookie中的值
                    Date date = new Date(llt);
                    out.write(date.toLocaleString());
                }
            }
        }else {
            out.write("這是您第一次訪問本站!");
        }
        //服務器給客戶端響應一個cookie,覆蓋上次的數據
        Cookie lastLoginTime = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
        resp.addCookie(lastLoginTime);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

用於清除cookie的類(將cookie的有效期設置爲0便可):app

package psl.wong.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
//保存用戶上一次訪問的時間
public class CookieDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie lastLoginTime = new Cookie("LastLoginTime", System.currentTimeMillis() + "");
        lastLoginTime.setMaxAge(0);     //關鍵代碼
        PrintWriter writer = resp.getWriter();
        writer.write("This cookie has deleted!");
        resp.addCookie(lastLoginTime);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

web.xml的註冊:ide

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true"><servlet>
        <servlet-name>CookieDemo01</servlet-name>
        <servlet-class>psl.wong.servlet.CookieDemo01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CookieDemo01</servlet-name>
        <url-pattern>/login1</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>CookieDemo02</servlet-name>
        <servlet-class>psl.wong.servlet.CookieDemo02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CookieDemo02</servlet-name>
        <url-pattern>/login2</url-pattern>
    </servlet-mapping></web-app>
相關文章
相關標籤/搜索