一文了解Cookie

x33g5p2x  于2022-02-24 转载在 其他  
字(3.9k)|赞(0)|评价(0)|浏览(306)

简介

Cookie基本使用

发送Cookie

获取Cookie

Cookie原理

Cookie使用细节

cookie存活时间

Cookie存储中文

简介

会话:
用于打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话可以包含多次请求和响应(同一浏览器发送的多次请求为一次会话,不同浏览器发送请求属于不同的会话)

会话跟踪

一种维护浏览器状态的方法,服务器需要识别多次请求是哦否来自同一浏览器,以便在同一次会话的多次请求间共享数据(服务器无法识别每次请求是否来自同一浏览器)

HTTP协议是无状态的,每次浏览器向服务器时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术。(设置为无状态是为了响应速度)

Cookie和session就是用来解决一次会话间多次请求间数据共享的问题。

实现方式:

1、客户端会话跟踪技术:Cookie

2、服务端会话跟踪技术:Session

Cookie基本使用

Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问

Cookie基本使用

发送Cookie

1、创建Cookie对象,设置数据

Cookie cookie=new Cookie("key","value");

2、发送Cookie到客户端:使用response对象

response.addCookie(cookie);

1、在src下创建一个com包下CookieServlet类

package com;

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;

public class CookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //发送Cookie
        //创建Cookie对象
        Cookie cookie=new Cookie("username", "zhangsan");
        //2、Cookie,response
        resp.addCookie(cookie);
    }
}

2、web.xml配置

<servlet>
        <servlet-name>CookieServlet</servlet-name>
        <servlet-class>com.CookieServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CookieServlet</servlet-name>
        <url-pattern>/cookieServlet</url-pattern>
    </servlet-mapping>

启动访问即可,f12查看

 获取Cookie

3、获取客户端携带的所有Cookie,使用request对象

Cookie[] cookie=request.getCookie();

4、遍历数组,获取每一个Cookie对象:for

5、使用Cookie对象方法获取数据

cookie.getName();
cookie.getValue();

创建CookieServlet1类,再配置web.xml

package com;

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;

public class CookieServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //3、获取cookie数组
        Cookie[] cookies=req.getCookies();
        //4、遍历数组
        for( Cookie cookie1:cookies){
            //5、获取数据
            String name=cookie1.getName();
            String value=cookie1.getValue();
            System.out.println("name="+name+"\nvalue="+value);
            System.out.println("-------------");
        }
    }
}

先访问cookieServlet,在访问cookieServlet1得

这就实现了,同一浏览器的两次访问(cookieServlet和cookieServlet1两次)数据共享

 Cookie原理

Cookie的实现是基于HTTP协议的

响应头:set-cookie

请求头:cookie

访问时f12查看网络

 Cookie使用细节

cookie存活时间

默认情况下,cookie存储在浏览器内存中,当浏览器关闭,内存释放,则cookie被销毁

setMaxAge(int seconds):设置Cookie存活时间
①正数:将Cookie写入浏览器所在的电脑的硬盘,持久化存储,到时间自动删除

②负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭时,则Cookie被销毁

②零:删除对应Cookie 

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //发送Cookie
        //创建Cookie对象
        Cookie cookie=new Cookie("username", "zhangsan");
        //设置存活时间 比如一周
        cookie.setMaxAge(60*60*24*7);
        //2、Cookie,response
        resp.addCookie(cookie);

    }

Cookie存储中文

Cookie默认不能存储中文

如果需要储存,则需要进行转码:URL编码

默认情况不支持中文:

CookieServlet类下

public class CookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //发送Cookie
        //创建Cookie对象

        String value="张三";
        //URL编码
         value= URLEncoder.encode(value, "UTF-8");
           Cookie cookie=new Cookie("username", value);
        //设置存活时间 比如一周
        cookie.setMaxAge(60*60*24*7);
        //2、Cookie,response
        resp.addCookie(cookie);

    }
}

CookieServlet1类下

public class CookieServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //3、获取cookie数组
        Cookie[] cookies=req.getCookies();
        //4、遍历数组
        for( Cookie cookie1:cookies){
            //5、获取数据

            String name=cookie1.getName();
            String value=cookie1.getValue();
            //URL解码
           value=URLDecoder.decode(value,"UTF-8" );
            System.out.println("name="+name+"\nvalue="+value);
            System.out.println("-------------");
        }
    }
}

相关文章