【JavaWeb】Cookie和Session(257-269)
创始人
2025-05-31 21:20:46

Cookie

257.Cookie-什么是Cookie

1、Cookie 翻译过来是饼干的意思。
2、Cookie 是服务器通知客户端(浏览器)保存键值对的一种技术。
3、客户端有了 Cookie 后,每次请求都发送给服务器
4、每个 Cookie 的大小不能超过 4kb
5、可以一次创建多个Cookie

258.Cookie-Cookie的创建

1、先创建new Cookie
2、通知客户端保存add Cookie,这条语句已经在浏览器创建了Cookie
3、通过响应头set-Cookie通知客户端保存Cookie
在这里插入图片描述

    protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1 创建Cookie对象Cookie cookie = new Cookie("key4", "value4");//2 通知客户端保存Cookieresp.addCookie(cookie);//1 创建Cookie对象Cookie cookie1 = new Cookie("key5", "value5");//2 通知客户端保存Cookieresp.addCookie(cookie1);resp.getWriter().write("Cookie创建成功");}

Cookie测试html








Cookie





259.Cookie-Cookie的获取

在这里插入图片描述
服务器获取客户端的 Cookie 只需要一行代码:

//req.getCookies()就会返回Cookie对象的数组Cookie[]
Cookie[] cookies=req.getCookies();

Cookie 的工具类:

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;}
}

Servlet 程序中的代码:

		protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie[] cookies = req.getCookies();for (Cookie cookie : cookies) {// getName方法返回Cookie的key(名)// getValue方法返回Cookie的value值resp.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "] 
");}Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);// 如果不等于null,说明赋过值,也就是找到了需要的Cookieif (iWantCookie != null) {resp.getWriter().write("找到了需要的Cookie");}}

260.Cookie-Cookie值的修改

方案一:
1、先创建一个要修改的同名(指的就是 key)的 Cookie 对象
2、在构造器,同时赋于新的 Cookie 值。
3、调用 response.addCookie( Cookie );

//方案一:
//1、先创建一个要修改的同名的Cookie 对象
//2、在构造器,同时赋于新的Cookie 值。
Cookie cookie = new Cookie("key1","newValue1");
//3、调用response.addCookie( Cookie ); 通知 客户端保存修改
resp.addCookie(cookie);

方案二:
1、先查找到需要修改的 Cookie 对象
2、调用 setValue()方法赋于新的 Cookie 值。
3、调用 response.addCookie()通知客户端保存修改

//方案二:
//1、先查找到需要修改的Cookie 对象
Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
if (cookie != null) {//2、调用setValue()方法赋于新的Cookie 值。cookie.setValue("newValue2");//3、调用response.addCookie()通知客户端保存修改resp.addCookie(cookie);
}

261.Cookie-谷歌和火狐浏览器如何查看Cookie

谷歌浏览器如何查看 Cookie:
在这里插入图片描述
火狐浏览器如何查看 Cookie:
在这里插入图片描述

262.Cookie-Cookie的存活设置

Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)

setMaxAge()
正数:表示在指定的秒数后过期
负数:表示cookie不会被持久存储,浏览器一关,Cookie 就会被删除(默认都是-1)
零0:表示马上删除 Cookie

	//负数和默认情况,默认的会话级别的Cookieprotected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie = new Cookie("defalutLife","defaultLife");cookie.setMaxAge(-1);//设置存活时间resp.addCookie(cookie);}    //马上删除一个Cookieprotected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 先找到你要删除的Cookie对象Cookie cookie = CookieUtils.findCookie("key4", req.getCookies());if (cookie != null) {// 调用setMaxAge(0);cookie.setMaxAge(0); // 表示马上删除,都不需要等待浏览器关闭// 调用response.addCookie(cookie);resp.addCookie(cookie);resp.getWriter().write("key4的Cookie已经被删除");}}//设置存活1个小时的Cooieprotected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie = new Cookie("life3600", "life3600");cookie.setMaxAge(60 * 60); // 设置Cookie一小时之后被删除。无效resp.addCookie(cookie);resp.getWriter().write("已经创建了一个存活一小时的Cookie");}

263.Cookie-Cookie的path属性

Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器。哪些不发。
path 属性是通过请求的地址来进行有效的过滤。

CookieA path=/工程路径
CookieB path=/工程路径/abc

请求地址如下:

请求地址CookieACookieB
http://ip:port/工程路径/a.html发送不发送
http://ip:port/工程路径/abc/a.html发送发送
protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie = new Cookie("path1", "path1");// getContextPath() ===>>>>  得到工程路径cookie.setPath( req.getContextPath() + "/abc" ); // ===>>>>  /工程路径/abcresp.addCookie(cookie);resp.getWriter().write("创建了一个带有Path路径的Cookie");
}

264.Cookie-Cookie练习之免用户名登录

在这里插入图片描述
login.jsp 页面

用户名:
密码:

LoginServlet 程序:

package com.atguigu.servlet;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 LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");if ("wzg168".equals(username) && "123456".equals(password)) {//登录 成功Cookie cookie = new Cookie("username", username);cookie.setMaxAge(60 * 60 * 24 * 7);//当前Cookie一周内有效resp.addCookie(cookie);System.out.println("登录 成功");} else {
//            登录 失败System.out.println("登录 失败");}}
}

Session

265.Session-什么是Session

1、Session 就一个接口(HttpSession)。
2、Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
3、每个客户端都有自己的一个 Session 会话。
4、Session 会话中,我们经常用来保存用户登录之后的信息。

266.Session-Session的创建和获取

request.getSession()
如何创建和获取 Session。它们的 API 是一样的。
第一次调用是:创建 Session 会话
之后调用都是:获取前面创建好的 Session 会话对象。

isNew()
判断到底是不是刚创建出来的(新的)
true 表示刚创建
false 表示获取之前创建

getId()
得到 Session 的会话 id 值。
每个会话都有一个身份证号。也就是 ID 值。而且这个 ID 是唯一的。

267.Session-Session域中数据的存取

   	/*** 往Session中保存数据* @param req* @param resp* @throws ServletException* @throws IOException*/protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.getSession().setAttribute("key1", "value1");resp.getWriter().write("已经往Session中保存了数据");}/*** 获取Session域中的数据* @param req* @param resp* @throws ServletException* @throws IOException*/protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Object attribute = req.getSession().getAttribute("key1");resp.getWriter().write("从Session中获取出key1的数据是:" + attribute);}

268.Session-Session超时的控制

public void setMaxInactiveInterval(int interval)
设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。
值为正数的时候,设定 Session 的超时时长。
负数表示永不超时(极少使用)

public int getMaxInactiveInterval()
获取 Session 的超时时间

public void invalidate()
让当前 Session 会话马上超时无效。

Session 默认的超时时长是多少?
Session 默认的超时时间长为 30 分钟
因为在Tomcat 服务器的配置文件web.xml 中默认有以下的配置,它就表示配置了当前 Tomcat 服务器下所有的 Session超时配置默认时长为:30 分钟。

如果说。你希望你的 web 工程,默认的 Session 的超时时长为其他时长。你可以在你自己的 web.xml 配置文件中做以上相同的配置。就可以修改你的 web 工程所有 Seession 的默认超时时长。

30

如果你想只修改个别 Session 的超时时长。就可以使用上面的 API。setMaxInactiveInterval(int interval)来进行单独的设置。
session.setMaxInactiveInterval(int interval)单独设置超时时长。

Session 超时的概念介绍:

在这里插入图片描述

	protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取了Session的默认超时时长int maxInactiveInterval = req.getSession().getMaxInactiveInterval();resp.getWriter().write("Session的默认超时时长为:" + maxInactiveInterval + " 秒 ");}protected void life3(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 先获取Session对象HttpSession session = req.getSession();// 设置当前Session3秒后超时session.setMaxInactiveInterval(3);resp.getWriter().write("当前Session已经设置为3秒后超时");}

269.Session-浏览器和Session之间关联的技术内幕

Session 技术,底层其实是基于 Cookie 技术来实现的。
在这里插入图片描述

相关内容

热门资讯

1.0奥拓真实油耗多少(铃木奥... 今天给各位分享1.0奥拓真实油耗多少的知识,其中也会对铃木奥拓10手动挡油耗进行解释,如果能碰巧解决...
长城哈弗m4报价及图片(长城哈... 本篇文章极速百科给大家谈谈长城哈弗m4报价及图片,以及长城哈弗h4新车报价2021款对应的知识点,希...
历史中诸葛亮一共几次北伐曹魏,... 历史中诸葛亮一共几次北伐曹魏目录历史中诸葛亮一共几次北伐曹魏诸葛亮北伐几次三国演义中诸葛亮六次北伐分...
卤水的做法及配方,卤料的配方大... 卤水的做法及配方目录卤水的做法及配方卤料的配方大全?卤水的制作?卤菜的卤汁怎么做?卤水的做法及配方 ...
VC是什么,vc是什么? 极速... VC是什么目录VC是什么vc是什么?VC指什么?vc是什么意思?VC是什么 VC是风险投资(V...
半妖倾城的结局是什么,半妖倾城... 半妖倾城的结局是什么目录半妖倾城的结局是什么半妖倾城结局是be吗电视剧(半妖倾城)结局是什么?半妖倾...
排除通用新君越6T40E自动变... 今天给各位分享排除通用新君越6T40E自动变速器烧片故障的知识,其中也会对别克君越变速箱维修视频进行...
女生日常的基本化妆都需要哪些东... 女生日常的基本化妆都需要哪些东西目录女生日常的基本化妆都需要哪些东西女生日常的基本化妆都需要哪些东西...
支付宝蚂蚁森林怎么刷能量 极速... 支付宝蚂蚁森林怎么刷能量目录支付宝蚂蚁森林怎么刷能量支付宝蚂蚁森林怎么刷能量 蚂蚁森林是支付宝...
足球禁区是什么意思,足球比赛中... 足球禁区是什么意思目录足球禁区是什么意思足球比赛中的“禁区”是指什么?足球场上大禁区小禁区的含义是什...
说唱里面的time是什么意思哈... 说唱里面的time是什么意思哈目录说唱里面的time是什么意思哈说唱中的time是什么意思Hey S...
怎么把电脑音量调节更大,电脑声... 怎么把电脑音量调节更大目录怎么把电脑音量调节更大电脑声音怎么调大怎么才能把电脑的声音调的更大点?如何...
岁末将至敬颂冬绥什么意思,岁末... 岁末将至敬颂冬绥什么意思目录岁末将至敬颂冬绥什么意思岁末将至的下一句是什么?岁末将至,敬颂冬绥是什么...
乌合之众的乌是指什么动物(乌合... 本篇文章极速百科给大家谈谈乌合之众的乌是指什么动物,以及乌合之众的动物是什么生肖对应的知识点,希望对...
什么是有理数(什么是有理数定义... 今天给各位分享什么是有理数的知识,其中也会对什么是有理数定义进行解释,如果能碰巧解决你现在面临的问题...
绿萝施什么肥料长得好,绿萝最好... 绿萝施什么肥料长得好目录绿萝施什么肥料长得好绿萝最好的肥料是啥绿萝施什么肥?绿萝用什么肥料长得快 让...
古剑奇谭3开场动画及结局剧情分... 古剑奇谭3开场动画及结局剧情分析目录古剑奇谭3开场动画及结局剧情分析古剑奇谭3开头怎么那么长仙剑3的...
新华字典中方字的笔划顺序是什么... 新华字典中方字的笔划顺序是什么目录新华字典中方字的笔划顺序是什么方子的笔画中国汉字的总方针是先上,后...
和地球最相似的星球叫什么,最像... 和地球最相似的星球叫什么目录和地球最相似的星球叫什么最像地球的星球与地球最相似的星球叫什么?和地球最...
什么是几九,几九是什么意思 极... 什么是几九目录什么是几九几九是什么意思今天是几九了啊,一九,二九,三九,四九,五九,是什么意思什么是...
东北都有什么特色小零食啊,东北... 东北都有什么特色小零食啊目录东北都有什么特色小零食啊东北特产零食东北特色小吃东北三省各自有什么特色零...
化妆棉的作用有哪些,化妆棉的作... 化妆棉的作用有哪些目录化妆棉的作用有哪些化妆棉的作用化妆棉有什么作用?化妆棉的作用有哪些 1....
六道有哪六道,火影忍者六道能力... 六道有哪六道目录六道有哪六道火影忍者六道能力六道轮回,都有哪六道?六道是指哪六道?六道有哪六道 ...
飞信手机多方通话怎么用(飞信手... 本篇文章极速百科给大家谈谈飞信手机多方通话怎么用,以及飞信手机好友收费吗对应的知识点,希望对各位有所...
会计中的流动资产包括哪些,下列... 会计中的流动资产包括哪些目录会计中的流动资产包括哪些下列会计科目中,属于流动资产的是(  )。会计基...
旺旺碎冰冰是什么梗的简单介绍 ... 本篇文章极速百科给大家谈谈旺旺碎冰冰是什么梗,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站...
怎样给芭比做衣服,给芭比娃娃做... 怎样给芭比做衣服目录怎样给芭比做衣服给芭比娃娃做衣服怎么做不用缝怎样帮芭比娃娃做衣服怎样给芭比做衣服...
如何区分,植物油,矿物油,白油... 本篇文章极速百科给大家谈谈如何区分,植物油,矿物油,白油,液蜡?,以及怎么区别植物油和矿物油对应的知...
武汉空气为什么那么差(为什么武... 本篇文章极速百科给大家谈谈武汉空气为什么那么差,以及为什么武汉空气质量这么差对应的知识点,希望对各位...
美国4大全尺寸皮卡之一,性能不... 本篇文章极速百科给大家谈谈美国4大全尺寸皮卡之一,性能不输福特猛禽,通用塞拉...,以及美国皮卡车品...