javaEE-03-cookie与session
创始人
2024-11-20 13:35:18
0

文章目录

  • Cookie
    • 创建Cookie
    • 获取Cookie
    • 更新Cookie
    • Cookie 生命控制
    • Cookie 有效路径
  • Session 会话
    • 创建和获取session
    • Session 域数据的存取
    • Session 生命周期控制
      • 浏览器和 Session 之间关联

Cookie

Cookie 是服务器通知客户端保存键值对的一种技术,客户端有了 Cookie 后,每次请求都发送给服务器并且每个 Cookie 的大小不能超过 4kb。

创建Cookie

  1. 创建一个新的servlet程序CookieServlet
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 {     	resp.setContentType("text/html;charset=utf-8");         //1 创建Cookie 对象         Cookie cookie = new Cookie("username", "root");         //2 通知客户端保存Cookie         resp.addCookie(cookie);         //1 创建Cookie 对象         Cookie cookie1 = new Cookie("password", "123456");         //2 通知客户端保存Cookie         resp.addCookie(cookie1);         resp.getWriter().write("Cookie 创建成功");     }      @Override     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         doGet(req, resp);     } }  
  1. 增加新的映射文件web.xml
  	         CookieServlet         CookieServlet                   CookieServlet         /createCookie       
  1. 启动服务器,测试cookie是否创建成功,http://localhost:8080/javaee_tomcat_war_exploded/createCookie
    在这里插入图片描述
    按F12,或者鼠标右击检查,选择应用程序,点开Cookie,查看到对应信息
    在这里插入图片描述

获取Cookie

  1. 创建一个工具类用来获取Cookie信息CookieUtils
import javax.servlet.http.Cookie;  public class CookieUtils {     /**      * 查找指定名称的Cookie 对象      *      * @param name      * @param cookies      * @return      */     public static Cookie findCookie(String name, Cookie[] cookies) {         if (name == null || cookies == null || cookies.length == 0) {             return null;         }          for (Cookie cookie : cookies) {             if (name.equals(cookie.getName())) {                 return cookie;             }         }         return null;     }  } 
  1. 创建一个新的servlet用来获取到Cookie信息
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 getCookieServlet extends HttpServlet {      @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         resp.setContentType("text/html;charset=utf-8");         Cookie[] cookies = req.getCookies();          for (Cookie cookie : cookies) {             // getName 方法返回Cookie 的key(名)             // getValue 方法返回Cookie 的value 值             resp.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "] 
"); } Cookie mycookie = CookieUtils.findCookie("username", cookies); // 如果不等于null,说明赋过值,也就是找到了需要的Cookie if (mycookie != null) { resp.getWriter().write("找到了需要的 Cookie"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
  1. 新增对应的映射文件信息
  	         getCookieServlet         getCookieServlet                   getCookieServlet         /getCookie       
  1. 启动项目进行访问。
    http://localhost:8080/javaee_tomcat_war_exploded/getCookie
    在这里插入图片描述
    这里我们直接获取到了cookie信息,这是因为我们之前的程序中存放了对应的cookie信息,如果我们换一个浏览器进行访问就访问不到之前的cookie信息了,这时我们可以重新调用一下http://localhost:8080/javaee_tomcat_war_exploded/createCookie这个请求,再获取cookie。

更新Cookie

更新cookie有俩种方法:

  • 先创建一个要修改的同名(指的就是 key)的 Cookie 对象,在构造器,同时赋于新的 Cookie 值,最后调用 response.addCookie( Cookie );
  • 先查找到需要修改的 Cookie 对象,调用 setValue()方法赋于新的 Cookie 值,调用 response.addCookie()通知客户端保存修改。

Cookie 生命控制

管理 Cookie 什么时候被销毁(删除)
通过Cookie对象中的setMaxAge()来控制Cookie的声明周期。

  • 正数,表示在指定的秒数后过期, cookie.setMaxAge(60 * 60);表示一小时后cookie失效
  • 负数,表示浏览器一关,Cookie 就会被删除(默认值是-1),cookie.setMaxAge(-1);表示浏览器一关cookie就会失效
  • 零,表示马上删除 Cookie,cookie.setMaxAge(-1);表示cookie马上就会失效。

Cookie 有效路径

Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器。哪些不发。

  • cookie.setPath( req.getContextPath() + "/abc" ); 表示工程路径/abc路径下面的可以获取到cookie信息。 

Session 会话

Session 就是一个接口(HttpSession),作为一个会话,它是用来维护一个客户端和服务器之间关联的一种技术。每个客户端都有自己的一个 Session 会话。

创建和获取session

通过HttpServletRequest中的getSession()方法来创建一个session对象,之后使用该方法都是获取到之前创建的session对象。

  • isNew(): 判断到底是不是刚创建出来的(新的)
  • getId(): 得到 Session 的会话 id 值。

Session 域数据的存取

  1. 定义俩个servlet程序,一个用来存入数据,一个用来取出数据

SessionServlet类

import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException;  public class SessionServlet extends HttpServlet {      @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         HttpSession session = req.getSession();         session.setAttribute("username","xiaoming");         session.setAttribute("password","123456");     }      @Override     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         doGet(req, resp);     } }  

getSessionServlet类

import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException;  public class getSessionServlet extends HttpServlet {      @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         HttpSession session = req.getSession();         String username = (String) session.getAttribute("username");         String password = (String) session.getAttribute("password");         System.out.println("用户名:" + username + ",密码:" + password);     }      @Override     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         doGet(req, resp);     } }  
  1. 创建对应的映射文件web.xml
  	         SessionServlet         SessionServlet                   SessionServlet         /createSession                    getSessionServlet         getSessionServlet                   getSessionServlet         /getSession       
  1. 启动服务进行测试,先输入这个网站http://localhost:8080/javaee_tomcat_war_exploded/createSession进行数据的请求,再输入http://localhost:8080/javaee_tomcat_war_exploded/getSession进行数据获取。

在这里插入图片描述

Session 生命周期控制

  1. 通过HttpSession对象中的setMaxInactiveInterval()来设置 Session 的超时时间(以秒为单位)。
  • 值为正数的时候: 设定 Session 的超时时长。
  • 值为负数的时候: 永不超时
  1. 通过getMaxInactiveInterval()方法来获取 Session 的超时时间
  2. 通过invalidate()来让当前Session会话马上失效
  3. Session 默认的超时时间长为 30 分钟。这个是tomcat中的默认配置。这个设置可以进行修改
  	20  

浏览器和 Session 之间关联

Session 技术,底层其实是基于 Cookie 技术来实现的。

  1. 当浏览器没有任何Cookie信息的时候,发请求到tomcat服务器时调用了HttpServletRequest对象的getSession()方法,这时服务器会创建一个Cookie对象,这个Cookie对象的key为JSESSIONID,值为新创建出来的Sessino的id值。
  2. 通过响应将该值传递给客户端,之后客户端每次请求的时候就会将id以Cookie的形式发送给服务器端。
  3. 服务器再获取HttpSession对象的时候就会通过Cookie中的id值来找到自己之前创建的Seesion对象。

欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏,另外对编程感兴趣的友友们可以加以下群共同学习。群号:127871664

相关内容

热门资讯

5e咋踢人 在5e平台中,踢人需要先暂停比赛,然后在控制台输入命令“kick 玩家ID”,按回车即可踢出指定玩家...
为什么黑瞎子是周穆王 黑瞎子是周穆王这一说法源于网络段子,并非真实历史。周穆王是西周时期的一位君主,与“黑瞎子”无关。网络...
什么是lst文件 .lst文件是一种列表文件,通常包含一系列文本或数据,用于存储和组织信息。这种文件格式常用于各种应用...
iwatch哪个版本好 iWatch即Apple Watch,不同版本适合不同需求。最新Series 7功能最全,但价格较高...
腾讯是什么端口 腾讯是一家中国领先的互联网服务公司,旗下拥有众多知名产品和服务,如社交平台微信和QQ、腾讯云、腾讯广...
5e对战平台如何快速升级 在5e对战平台快速升级,需要多玩游戏并提高自己的技能。通过获得高分数和胜利,可以提升等级。参加比赛和...
怎么给手机加密码的方法(手机加... 1. 数字密码:在设置中选择“锁屏和安全”或“安全”,然后选择“屏幕锁定方式”,输入4位或更多位数的...
推荐一款适合ps的笔记本电脑 适合PS的笔记本电脑应具备高性能处理器、大内存、高分辨率显示屏,推荐戴尔XPS 15,搭载i7处理器...
5e对战平台新手任务怎么完成-... 在5e对战平台,完成新手任务通常需进入相应任务页面,按照提示操作,如完成几局游戏、观看教程等。完成任...
苹果未受信任的企业级开发者在哪... 在设置中,选择“通用”-“描述文件”,找到对应的企业级应用,点击进入后,开启“信任”。苹果未受信任的...