Cookie详解

Cookie的概念

Cookie就是客户端会话技术,主要目的是将少量的数据保存到客户端(浏览器)中

Cookie在客户端与服务器端之间的执行过程

在这里插入图片描述

Cookie的实现原理

根据执行过程,我们其实发现其实现原理就是响应头set-cookie和请求头cookie的完成

Cookie建立的三大步骤

  1. 创建cookie: Cookie cookie = new Cookie(name,value);
  2. 响应cookie:response.addCookie(cookie)
  3. 获取cookie:Cookie[] cookies = request.getCookies(cookie);

Cookie入门案例

设置Cookie

@WebServlet("/CookieSet")
public class CookieSet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建cookie
        Cookie cookie1 = new Cookie("username", "zhangsan");
        Cookie cookie2 = new Cookie("password", "123");
        //响应cookie
        response.addCookie(cookie1);
        response.addCookie(cookie2);
    }
}

得到cookie

@WebServlet("/CookieGet")
public class CookieGet extends HttpServlet {

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

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html ; charset=utf-8");
        //得到Cookie
        Cookie[]  cookies = request.getCookies();
        //遍历cookies
        if(cookies!=null){
            for (Cookie cookie : cookies){
                System.out.println(cookie.getName()+cookie.getValue());
                response.getWriter().write("cookie的name值是:"+cookie.getName()+"</br>cookie的value是"+cookie.getValue());
                response.getWriter().write("</br>");
            }
        }else{
            response.getWriter().write("未获取到cookie");
        }
    }
}

运行结果
在这里插入图片描述

Cookie细节处理

1、Cookie在浏览器中的保存时间

Cookie默认保存方式是浏览器关闭,则Cookie自动销毁,想要长久保存可以用Cookie.setMaxAge(int seconds); 参数三种分别是负数,0,正数

  • 正数:当是正数的时候,你设置多久保存多久(前提是容量够),参数单位是秒
  • 0:当时零的时候,浏览器访问完服务器就会自动删除
  • 负数:当是负数的时候,也i就是Cookie的默认值,浏览器关闭则删除
2、Cookie存储中文的问题
  • 在tomcat8之前是不支持中文存储的,但是可以将其转码存储,一般是URL转码
  • tomcat8之后是支持中文存储的,但是不支持特殊字符的存储,存储之前可以用URL转码,使用时候再进行解码
    转码:URLEncoder.encode(value,“utf-8”);
    解码:URLDecoder.decode(value,“utf-8”);
3、Cookie共享问题
  • 同一个服务器下不同的web项目默认情况下Cookie是不共享的,但是可以设置setPath(String path); 将所有的虚拟目录设置为“/”,即path是用“/”表示
  • 不同服务器下的多个项目共享,可以通过setDomain(String path)即将它们的一级域名设置相同,例如
    setDomain(".baidu.com")
    那么tieba.baidu.com和news.baidu.com中的Cookie可以实现共享

Cookie的主要特点以及作用

  1. Cookie只能存储小量的数据,对于单个Cookie最多是4KB,对于同一域名下的Cookie数量限制是20个
  2. 作用:在不登陆的情况下,服务端对客户端身份识别,例如,听音乐不登陆,但是它也会根据你平时听歌习惯,向你推荐歌曲,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值