其他分享
首页 > 其他分享> > Cookie技术讲解

Cookie技术讲解

作者:互联网

Cookie
由服务器创建
服务器在接受了请求之后,将Cookie根据响应发给浏览器,浏览器存住Cookie,下次请求访问服务器时候,带着cookie来,告诉服务器我原来来过了

相当于你办理一个会员卡,第一次去理发店,办理了一个会员卡,下去接着去带着会员卡去让理发店元知道,原来你小子来过呀!
发送Cookie

package cn.itcast.cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/ServletCookie")
public class ServletCookie extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("msg","hello");//创建一个cookie
        response.addCookie(cookie);//发送cookie将response里面存放cookie

    }

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

想要获取Cookie

package cn.itcast.cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/ServletCookie2")
public class ServletCookie2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();//获取Cookie
        if (cookies != null){
            for (Cookie cookie:cookies
                 ) {
                String name = cookie.getName();
                String value = cookie.getValue();
                System.out.println(name + " ---" + value);
            }
        }
    }

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

Cookie
案例
案例需求:
1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串

特殊符号在Cookie传递过程中,要考虑编码和解码问题
cookie不太支持特殊符号,所以传递特殊符号时候要进行
URL编码和解码工作

package cn.itcast.cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/ServletTestCookie")
public class ServletTestCookie extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //判断request里面是不是有一个叫lasttime的cookie
        //如果没有cookie,或者cookie中不包含lasttime标签,都说明是第一次进行登录
        Cookie[] cookies = request.getCookies();

        response.setContentType("text/html;charset=utf-8");
        //遍历cookies数组
        boolean flag = false;//设置一个标签去看看,cookie中有没有又没lasttime标签,
        if(cookies != null){
            for (Cookie cs : cookies
            ){
                String name = cs.getName();//获取cookie名称
                //看一下名称里有没有是否是lasttime
                if("lastTime".equals(name)){
                    //表示不是第一次访问
                    //响应数据
                    flag = true;//如果其中有lasttime,那么将flag编程rtue

                    String value = cs.getValue();
                    value = URLDecoder.decode(value,"utf-8");
                    System.out.println("解码之后输出" + value);
                    response.getWriter().write("你好欢迎回来,上次登录时间是" + value);


                    cs.setMaxAge(60*60*30*24);//设置cookie持久化存储
                    //同时获取当前时间的cookie,重新发送给浏览器存储起来
                    Date date = new Date();//获取当前时间
                    SimpleDateFormat sdf  = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");

                    //相当于给一个系统日期,你给变成想要的日期
                    String lasttime = sdf.format(date);//给定一个规整格式,传一个系统参数,然后转化为你想要的格式
                    //相当于将日期Date函数转化成为了字符串

                     lasttime = URLEncoder.encode(lasttime, "utf-8");//对cookie中携带信息进行url编码
                    //编码后进行重新赋值
                    System.out.println("上面编码之后输出" + lasttime);

                    cs.setValue(lasttime);//重新设置好cookie值
                    response.addCookie(cs);//将当前时间发还给浏览器留着下次用
                    break;
                }
            }
        }


            if (cookies == null || flag == false){//cookie中没有值,获取cookie中没找到lasttime,说明用户第一登录
                response.getWriter().write("你好欢迎登录");
                //然后建立一个cookie,cookie中设定好时间,发给浏览器




                //同时获取当前时间的cookie,重新发送给浏览器存储起来
                Date date = new Date();//获取当前时间
                SimpleDateFormat sdf  = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");

                //相当于给一个系统日期,你给变成想要的日期
                String lasttime = sdf.format(date);//给定一个规整格式,传一个系统参数,然后转化为你想要的格式
                //相当于将日期Date函数转化成为了字符串
                lasttime = URLEncoder.encode(lasttime,"utf-8");
                System.out.println("第二次编码后输出" + lasttime);
                Cookie cookie = new Cookie("lastTime",lasttime);
                //重新设置好cookie值
                cookie.setMaxAge(60*60*30*24);//设置cookie持久化存储
                response.addCookie(cookie);//将当前时间发还给浏览器留着下次
            }

    }

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

标签:讲解,技术,cookie,Cookie,import,lasttime,servlet,javax
来源: https://blog.csdn.net/qq_40707269/article/details/110861612