0


一文了解Cookie

简介

会话:

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

会话跟踪

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

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

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

实现方式:

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

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

Cookie基本使用

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

Cookie基本使用

发送Cookie

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

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

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

  1. response.addCookie(cookie);

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

  1. package com;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.Cookie;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. public class CookieServlet extends HttpServlet {
  9. @Override
  10. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  11. //发送Cookie
  12. //创建Cookie对象
  13. Cookie cookie=new Cookie("username", "zhangsan");
  14. //2、Cookie,response
  15. resp.addCookie(cookie);
  16. }
  17. }

2、web.xml配置

  1. <servlet>
  2. <servlet-name>CookieServlet</servlet-name>
  3. <servlet-class>com.CookieServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>CookieServlet</servlet-name>
  7. <url-pattern>/cookieServlet</url-pattern>
  8. </servlet-mapping>

启动访问即可,f12查看

获取Cookie

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

  1. Cookie[] cookie=request.getCookie();

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

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

  1. cookie.getName();
  2. cookie.getValue();

创建CookieServlet1类,再配置web.xml

  1. package com;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.Cookie;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. public class CookieServlet1 extends HttpServlet {
  9. @Override
  10. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  11. //3、获取cookie数组
  12. Cookie[] cookies=req.getCookies();
  13. //4、遍历数组
  14. for( Cookie cookie1:cookies){
  15. //5、获取数据
  16. String name=cookie1.getName();
  17. String value=cookie1.getValue();
  18. System.out.println("name="+name+"\nvalue="+value);
  19. System.out.println("-------------");
  20. }
  21. }
  22. }

先访问cookieServlet,在访问cookieServlet1得

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

Cookie原理

Cookie的实现是基于HTTP协议的

响应头:set-cookie

请求头:cookie

访问时f12查看网络

Cookie使用细节

cookie存活时间

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

setMaxAge(int seconds):设置Cookie存活时间

①正数:将Cookie写入浏览器所在的电脑的硬盘,持久化存储,到时间自动删除

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

②零:删除对应Cookie

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

Cookie存储中文

Cookie默认不能存储中文

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

默认情况不支持中文:

CookieServlet类下

  1. public class CookieServlet extends HttpServlet {
  2. @Override
  3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  4. //发送Cookie
  5. //创建Cookie对象
  6. String value="张三";
  7. //URL编码
  8. value= URLEncoder.encode(value, "UTF-8");
  9. Cookie cookie=new Cookie("username", value);
  10. //设置存活时间 比如一周
  11. cookie.setMaxAge(60*60*24*7);
  12. //2、Cookie,response
  13. resp.addCookie(cookie);
  14. }
  15. }

CookieServlet1类下

  1. public class CookieServlet1 extends HttpServlet {
  2. @Override
  3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  4. //3、获取cookie数组
  5. Cookie[] cookies=req.getCookies();
  6. //4、遍历数组
  7. for( Cookie cookie1:cookies){
  8. //5、获取数据
  9. String name=cookie1.getName();
  10. String value=cookie1.getValue();
  11. //URL解码
  12. value=URLDecoder.decode(value,"UTF-8" );
  13. System.out.println("name="+name+"\nvalue="+value);
  14. System.out.println("-------------");
  15. }
  16. }
  17. }


本文转载自: https://blog.csdn.net/weixin_60719453/article/details/122949193
版权归原作者 执久呀 所有, 如有侵权,请联系我们删除。

“一文了解Cookie”的评论:

还没有评论