Cookie学习

# 学习内容 :

 1. 会话技术 :

    (1. Cookie

    (2. Session

  2. JSP :入门学习

## 会话技术 :

  1. 会话 :一次会话中包含多次请求和响应。

      * 一次会话: 浏览器第一次给服务器资源发送请求,会话建立,直到一方断开为止。

   2. 功能 : 再一次会话的范围内的多次请求间,共享数据

   3. 方式 : 

     (1. 客户端会话技术 :Cookie

     (2. 服务器端会话技术 :Session

## Cookie:

  1. 概念 :客户端会话技术,将数据保存到客户端

  2. 快速入门 :

    * 使用步骤 :

        (1. 创建Cookie对象,绑定数据

            * new Cookie(String name,String value)

     (2. 发送Cookie对象

           * response.addCookie(Cookie,cookie) 

     (3. 获取Cookie,拿到数据

           * request.getCookie()


package com.zhulin.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;

/**
 * @author Janson
 * @version 1.0
 * @date 2019/10/15 20:51
 */

/**
 * Cookie快速入门
 */
@WebServlet("/cookieDemo1")
public class CookieDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.创建Cookie对象
        Cookie cookie = new Cookie("msg", "hello");

        //2.发送Cookie
        response.addCookie(cookie);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
package com.zhulin.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.File;
import java.io.IOException;

/**
 * @author Janson
 * @version 1.0
 * @date 2019/10/15 20:51
 */

/**
 * Cookie快速入门
 */
@WebServlet("/cookieDemo2")
public class CookieDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //3.获取Cookie
        Cookie[] cs = request.getCookies();

        //4.获取数据,遍历Cookie
      if (cs != null){
          for (Cookie c : cs) {
              String name = c.getName();
              String value = c.getValue();
              System.out.println(name + ":"+value);
          }
      }

    }

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

3. 实现原理 :

   * 基于响应头set-cookie 和请求头 cookie 实现

4.  Cookie 的细节

  (1.  一次可不可以发送多个cookie?

       * 可以

       * 可以调用多个Cookie对象,使用response调用多次addCookie方法发送cookie即可

(2. Cookie在浏览器中保存多长时间?

       a. 默认情况下,当浏览器关闭后,Cookie数据被销毁

       b. 持久化存储 :

          * setMaxAge(int second)

             # int型数据的三种形式

            (1. 正数 :将Cookie数据写到硬盘文件中,持久化存储。Cookie的存活时间

           (2. 负数 :默认值

           (3. 零 :代表删除Cookie信息 

(3. Cookie能不能存中文?

      * tomcat 8 之前,Cookie不能存储中文数据

          -----需要将中文数据转码--- 一般采用URL编码(%E3)

      * tomcat 8 之后,Cookie支持中文数据。对于一些特殊的字符,依旧需要URL编码

            

 


URL编码和节码代码展示 :

  URLEncoder.encoder(String s,String enc)  
                     //编码字符串,编码格式
//使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。
  
  URLDecoder.decoder(String s,String enc)
//使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码。

(4. Cookie共享问题?

    a. 假设在一个tomcat服务器中部署了多个web项目,那么这些web项目中的Cookie能不能共享?

          # 默认情况下不能共享

    * setPath(String path) : 设置cookie的获取范围。默认情况下,会去设置当前的虚拟目录

          a. 如果要共享,则可以将path设置为“/”,

   b. 不同tomcat服务器间Cookie的共享问题

       * setDomain(String path) : 如果一级域名相同,那么多个服务器之间cookie可以共享

           * setDomain(".baidu.com") , 那么teiba.baidu.com 和 news.baidu,com可以共

package com.zhulin.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;

/**
 * @author Janson
 * @version 1.0
 * @date 2019/10/15 20:51
 */

/**
 * Cookie快速入门
 */
@WebServlet("/cookieDemo5")
public class CookieDemo5 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.创建Cookie对象
        Cookie cookie = new Cookie("msg", "你好");

        //设置Cookie的存活shij
       // cookie.setMaxAge(30);
        //cookie.setMaxAge(-1);

        //设置path,让当前服务器下部署的所有项目共享Cookie信息
        cookie.setPath("/");
        //2.发送Cookie
        response.addCookie(cookie);
    }

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

5. Cookie的特点和作用 :

   (1. Cookie存储数据在客户端浏览器

   (2. 浏览器对于单个Cookie 的大小有限制(4kb)以及 对于同一个域名下的总Cookie数量也有限制(20) 

  * 作用 :

     (1. Cookie一般用于存储少量的不太敏感的数据

      (2. 在不登录的情况下,完成服务器对客户端的身份识别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janson666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值