浅谈cookie技术

浅谈cookie技术

Javaweb编程中有一种方法称之为Cookie,在百度百科中,这样给cookie下定义:

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

根据以上内容,也不难理解。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即可):

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的注册:

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>CookieDemo01servlet-name>
        <servlet-class>psl.wong.servlet.CookieDemo01servlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>CookieDemo01servlet-name>
        <url-pattern>/login1url-pattern>
    servlet-mapping>
    <servlet>
        <servlet-name>CookieDemo02servlet-name>
        <servlet-class>psl.wong.servlet.CookieDemo02servlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>CookieDemo02servlet-name>
        <url-pattern>/login2url-pattern>
    servlet-mapping>web-app>

你可能感兴趣的:(浅谈cookie技术)