javaweb会话技术-----cookie技术
request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:
-
void setAttribute(String name,Object obj)
:存储数据 -
Object getAttitude(String name)
:通过键获取值 -
void removeAttribute(String name)
:通过键移除键值对
客户端会话技术:
就是将共享数据保存到浏览器
Cookie的常用方法
创建Cookie new Cookie(key,value)
发送Cookie response.addCookie(Cookie)
获取Cookie request.getCookies()
Cookie的其他事项
-
可以有多个Cookie吗?
-
可以有多个
-
-
Cookie可以持久化吗?
-
-
可以使用
setMaxAge()
去设置Cookie的有效时间-
当参数为负数时就是默认存活时间(一次会话)
-
当参数为0时表示删除该Cookie
-
-
-
-
有乱码吗?
-
在Tomcat8及以上的版本中可以携带中文的cookie,但是不能有特殊字符
-
URL编码及解码的机制
-
value = URLEncoder.encode(value, "utf-8");// 编码
-
value = URLDecoder.decode(value, "utf-8");// 解码
-
-
Cookie的特点
-
将数据存储到浏览器,由浏览器对Cookie进行维护
-
Cookie的大小和个数受限,不同浏览器有所区别,Cookie保存的数据不能超过4095个字节,50个/每个域名
-
Cookie安全性不够高,所有的Cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。
package com.gton.servlet.servlet; 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; /** * @program: javaweb-tomcat * @description: * @author: GuoTong * @create: 2020-09-15 10:01 **/ @WebServlet(urlPatterns = {"/cookie"}, loadOnStartup = 1) public class CookieServlet extends HttpServlet { /*会话技术Cookie技术:基于浏览器存储共享数据*/ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8"); resp.setCharacterEncoding("UTF-8"); req.setCharacterEncoding("UTF-8");
String username ="汤姆"; URLEncoder.encode(username,"UTF-8");//编码 URLDecoder.decode(username,"UTF-8");//解码,在获取cookie的时候 Cookie cookie = new Cookie("username", username);
Cookie cookie = new Cookie("username", "tom"); /* * Connection: keep-alive Content-Length: 0 Content-Type: text/html;charset=UTF-8 Date: Tue, 15 Sep 2020 02:14:36 GMT Keep-Alive: timeout=20 * * * 会在响应头里面设置cookie相应的内容 Set-Cookie: username=tom * * * * 下一次的其他请求会在请求头里面: * *携带cookie传递过去。。。 * Cookie: JSESSIONID=1479F7B045B3E185BAFDAB2A67DC2D39; username=tom * * * * 达到数据在会话中数据共享。。。。。。 * */ //cookie持久化 /* * - Cookie默认的有效时间是一次会话 - 可以使用`setMaxAge()`去设置Cookie的有效时间 - 当参数为负数时就是默认存活时间(一次会话) - 当参数为0时表示删除该Cookie - 当参数为正整数时就代表存活的秒数 * */ resp.addCookie(cookie); } }
创建cookie时:
其他的请求:
所以达到数据共享。。。。。。。
删除cookie:cookie.setMaxAge(0);
//基于服务器的删除cookie cookie.setMaxAge(0); //如果添加的cookie的key重复,那么会覆盖之前的 resp.addCookie(cookie);
获取cookie:req.getCookies();
package com.gton.servlet.servlet; 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; /** * @program: javaweb-tomcat * @description: * @author: GuoTong * @create: 2020-09-15 10:01 **/ @WebServlet(urlPatterns = {"/cookieGet"}, loadOnStartup = 1) public class CookieServletGet extends HttpServlet { /*会话技术Cookie技术:基于浏览器存储共享数据*/ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); resp.setCharacterEncoding("UTF-8"); req.setCharacterEncoding("UTF-8"); Cookie[] cookies = req.getCookies(); for (Cookie cookie : cookies) { System.out.println(cookie.getName() + ":" + cookie.getValue()); } } }
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
Java入门到入坟
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南