ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Cookie技术讲解

2020-12-08 18:02:11  阅读:195  来源: 互联网

标签:讲解 技术 cookie Cookie import lasttime servlet javax


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有