当前位置: 首页 > article >正文

简单学习 --> Cookie 和Session

CookieCookie是 http请求 header 中的一个属性; (是浏览器 持久化存储数据的一种 机制) ;网页无法 访问 服务器的文件系统, 要存储数据就得使用其他方式 ;(Cookie 中保存的数据,也是 键值对格式(用户自定义的),最终也是要把这个键值对和请求一起发送回服务器的, 服务Cookie 会存储:当前用户的身份信息虽然 Cookie里的 的键值对 是用户自定义的,但有一个特殊情况,就是 Cookie会存储当当前用户的身份信息 (例子:Cookie 类似于: 就诊卡, 卡里有你的 身份信息; 可以通过这个卡 ,在医院的系统上查询到 你的各种信息(年龄,地址,余额,生的什么病,病史....) , 这些信息是不存在卡里,而是在系统了,不会说,卡丢了,信息就丢了 ; 卡只是存一个身份标识上面说的一系列数据,每个人都会有数据,都是存在服务器里的,这些数据都是在 数据库里的, 但 服务器执行操作的过程中, 数据就会从 数据库 查询出来,先临时存在这个内存结构就是Session(会话)Cookie 和 Session 这两个相互配合使用:那么通过 SessionId就可以查询到,自己的 Session服务器通过 hash表这样的 键值对结构来存储 Session (SessionId就是 key , Session 就是value, Session里又能存放各种用户信息(程序员自定义) )发送请求(带有Cookie)时, 系统按 Cookie查询,就知道了当前用户的信息 ;使用 Cookie 和 Session常用Cookie/Session的机制来完成 登录功能的实现 ;Cookie 是浏览器的机制, Servlet 提供了api 来获取 Cookie ;Session 是服务器 的机制, Servlet 内部也实现好了,提供了api 来使用 ;关键类 : HttpServletRequest方法1. Cookie[] getCookies() 获取请求中所有的 Cookie 内容 ; 一个Cookie对象就是一个键值对(name ,value) ​ 2. HttpSession getSession() 能从Cookie中获取SessionId ,并且查询出Session ; 如果 SessionId 没有在hash表里 ,也能创建出 对象键值对(分配新的SessionId , 创建出新的HttpSession对象) ​ Servlet 就是通过 HttpSession类 来表示一个会话, 服务器上用来存储Session的hash表就类似于这样 HashMapString, HttpSession 这样的来存储Session ; id Session对象HttpServletResponse1. addCookie() 把Cookie 加到响应里 ;HttpSession1. getAttribute() Attribute:属性 2. setAttribute() ​ Session对象里也是键值对结构的, 这些键值对属性,通过这两个方法来完成Cookie1. getName() 2. getValue() 获取 Cookie的名字 和 值实现登录页面发起Http请求,触发登录(带上用户名,密码)通过Servlet读取用户名和密码 ;验证是否登录成功 ;(登录成功,创建一个会话Session,并且把得到的SessionId,通过Cookie返回给客户端,客户端就会保存这个Cookie)登录成功,跳转到页面主页(跳转到另一个Servlet页面,把刚才的用户数据显示到页面上) ;登录页面请求处理请求步骤1.读取请求参数,(username 和 password) 2. 验证用户名和密码,看是否正确,一般通过数据库 3. 登录成功 ,创建会话 ;(会话创建好,可以保存一些信息) 4. 登录成功, 跳转到网站首页(使用重定向, 本身就发送一个get请求) 创建index主页 5. 获取Session,拿到用户信息 6. 拿到会话信息, 7. 拿到的数据,生成一个页面 (将数据写到响应里)细节问题:处理请求 1. 在读取请求中的参数前设置字符集,防止getParameter乱码username 2. 判断username和password时, 让设置的 密码.equals(username) , 防止 username为null equals针对参数为null进行了处理 3. 登录成功,使用重定向,跳转到主页 主页操作 4. 要判断SessionId是否存在(在拿到Session对象后,判断Session是否为null)查询/创建Session创建好Session后,自动保存到hash表里, 把SessionId 设置到响应了(在header里加上Set-Cookie字段), 浏览器收到响应后把SessionId保存到Cookie里 ;getSession()创建出新的会话(生成SessionId,和Session,并且保存到hash表里), 把SessionId设置到 响应的 header中的set-Cookie字段中 ; 浏览器收到响应,就会把这个set-Cookie保存到浏览器的 Cookie中; 浏览器保存SessionId到Cookie后; 这样后续访问服务器时,能够带上这个Cookie; ​ 后面重定向到 index主页, 所发送的 get请求 , 就会带有Cookie,Cookie里就会有SessionId,这样有这个身份标识 后续 服务器的Servlet就会通过这个SessionId查询hash表,拿到刚才创建的Session对象 ; 这样同一个Session对象就可以拿到同一个属性数据 ;数据共享在getSession内部是拿着 SessionId去查询的,SessionId自然在同一个浏览器的访问/Cookie ,就能拿到同一个对象前面设置了属性,后面也可以通过相同的key来拿到value,即使是在不同的servletAttributeimport javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; ​ WebServlet(/login) public class Login extends HttpServlet { Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1.读取请求参数,(username 和 password) //读取前设置一下字符集,防止getParameter乱码 req.setCharacterEncoding(utf8); String username req.getParameter(username) ; String password req.getParameter(password) ; // 2. 验证用户名和密码,看是否正确,一般通过数据库 // 这里直接把用户名和密码 设置好 // zhangsan在前面防止 用户和密码 为null或其他错误 if(!zhangsan.equals(username)|| !123.equals(password)){ //如果用户名和密码对不上 //登录失败, 给用户返回失败提示 ; resp.setContentType(text/html; charsetutf8); resp.getWriter().write(当前用户名或密码错误); return; } // 3. 登录成功 ,创建会话 ; HttpSession session req.getSession(true); // 给会话保存一些,自定义的数据, Attribute也是键值对,存储什么数据都可以 session.setAttribute(username , username); session.setAttribute(loginTime ,System.currentTimeMillis()); // 4. 登录成功, 跳转到网站首页 resp.sendRedirect(index); ​ } } ​import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; ​ //通过这个servlet生成页面 WebServlet(/index) public class IndexServlet extends HttpServlet { Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取到当前用户的 会话对象 , 生成的页面要当前用户的信息 HttpSession session req.getSession(false) ; // 不需要创建Session对象,直接返回Session // 如果SessionId 不存在,没有在hash表中,则表示该用户不存在 if(session null) { resp.setContentType(text/html; charsetutf8); resp.getWriter().write(你当前尚未登录!); return ; } // 2. 从 会话中拿到用户信息 String username (String) session.getAttribute(username); Long longinTime (Long) session.getAttribute(loginTime); //3. 把上面的数据生成页面 resp.setContentType(text/html; charsetutf8); String respBody hello username 上次登录的时间为:longinTime ; resp.getWriter().write(respBody); } } ​登录状态当登录成功, 后面在登录同一个网站,就不需要重新登录,会自动有登录信息 ;当前登录的SessionId也有有效期,可以在Cookie里设置,让浏览器到时就删除掉,也可以让服务器到时就删除掉Session ;

相关文章:

简单学习 --> Cookie 和Session

CookieCookie是 http请求 header 中的一个属性; (是浏览器 持久化存储数据的一种 机制) ;网页无法 访问 服务器的文件系统, 要存储数据就得使用其他方式 ;(Cookie 中保存的数据,也是 键值对格式(用户自定义的),最终也是要把这个键值对和请求一起发送回服务器的, 服务Cookie 会存…...

Midjourney提示词工程终极护城河:基于CLIP文本嵌入空间的向量对齐技术(附Python可视化调试工具)

更多请点击: https://intelliparadigm.com 第一章:Midjourney提示词工程终极护城河:基于CLIP文本嵌入空间的向量对齐技术(附Python可视化调试工具) 在生成式AI实践中,提示词质量差异常导致图像语义漂移——…...

C++ 条件变量 condition_variable

<condition_variable> 是 C 标准库中用于多线程同步的核心头文件。它主要提供了条件变量&#xff08;Condition Variable&#xff09;机制&#xff0c;用来协调多个线程的执行顺序。 简单来说&#xff0c;它的作用就是让一个或多个线程在特定条件不满足时进入休眠&#x…...

LangForce方法:强化VLA模型语言依赖,提升分布外泛化能力并保留语言核心功能

LangForce方法&#xff1a;强化VLA模型语言依赖&#xff0c;提升分布外泛化能力并保留语言核心功能当前VLA模型常依赖视觉线索而非语言指令&#xff0c;在新场景下表现不佳。论文提出的LangForce方法&#xff0c;通过引入对数似然比损失&#xff0c;强化模型对语言的依赖&#…...

【Twitter算法适配型Prompt库】:2024Q2官方推荐权重结构解析+ChatGPT生成内容通过率提升67%的12个黄金句式

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Twitter算法适配型Prompt库的演进逻辑与2024Q2权重变革本质 算法信号层重构驱动Prompt范式迁移 2024年第二季度&#xff0c;X&#xff08;原Twitter&#xff09;平台正式将Engagement Velocity Ratio&…...

1.8.2 掌握Scala类与对象 - 单例对象与伴生对象

本次实战通过三个案例深入解析了 Scala 中 object 的核心机制&#xff0c;展示了其如何替代 Java 的 static 关键字。首先&#xff0c;通过 MathUtils 定义了存放常量与工具方法的独立单例对象&#xff1b;其次&#xff0c;利用 Person 类与其同名对象演示了“伴生对象”特性&a…...

客户总问案件进度?知识产权自助查询系统让咨询量直降 80%

做知产代理的伙伴一定深有体会&#xff1a;客服每天大半时间都在回复 **“案件到哪一步了&#xff1f;”“历史文件发我一下”“去年委托的案子状态是什么”**&#xff1b;找历史文档要翻遍聊天记录、文件夹&#xff0c;耗时又尴尬&#xff1b;高频次沟通占用大量人力&#xff…...

Python 爬虫进阶技巧:请求头 UA 随机伪装绕过基础检测

前言 当下绝大多数网站均部署了基础反爬检测机制,服务器会优先校验客户端请求身份标识,未携带合法浏览器标识、使用默认程序请求载体的爬虫请求,极易被直接拦截、封禁 IP、返回空数据或跳转拦截页面。爬虫默认发起请求时会自带程序原生 UA 标识,服务器可通过该标识直接识别…...

1.8.1 掌握Scala类与对象 - Scala类

本次实战通过两组对比鲜明的案例&#xff0c;带你快速入门Scala面向对象编程的核心。首先&#xff0c;通过创建User类&#xff0c;我们掌握了Scala普通类的定义方式&#xff0c;了解了如何使用private修饰符封装成员变量&#xff0c;以及如何通过new关键字实例化对象并调用其公…...

别再只会用ActivePart了!CATIA二次开发中,如何用C#递归遍历任意复杂结构树?

CATIA二次开发进阶&#xff1a;用C#递归算法征服任意复杂装配树 在CATIA二次开发领域&#xff0c;ActivePart就像新手司机的自动挡——简单易用却限制重重。当面对包含数百个零件的飞机发动机装配体&#xff0c;或是横跨多个产品的汽车底盘系统时&#xff0c;仅能操作当前激活零…...

2026AI大模型接口聚合站榜单揭晓!这些平台助你一站式解决模型调用难题

跨国网络延迟、复杂的支付方式以及分散的接口协议&#xff0c;常常让开发者在调用AI大模型API时体验不佳。而AI大模型接口聚合站就像一个智能中转平台&#xff0c;能让调用AI大模型API变得像调用本地服务一样简单。通过API聚合站&#xff0c;开发者可以一站式解决国内外主流AI模…...

在线音视频处理工具实测对比:视频压缩、格式转换、音频提取哪家强?

一、为什么要关注在线音视频工具&#xff1f;先看一组数据。根据多家市场研究机构的报告&#xff0c;全球视频处理相关市场规模近年来持续增长&#xff0c;视频内容的生产量每年都在翻倍。各大平台每天新增的视频播放时长以亿计——这意味着越来越多的普通用户和创作者&#xf…...

终极指南:用ContextMenuManager彻底解决Windows右键菜单混乱问题

终极指南&#xff1a;用ContextMenuManager彻底解决Windows右键菜单混乱问题 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾因Windows右键菜单过于臃肿…...

在VS Code中结合Taotoken实现稳定的AI编程辅助体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在VS Code中结合Taotoken实现稳定的AI编程辅助体验 对于日常使用VS Code进行开发的程序员而言&#xff0c;一个稳定、不间断的AI编…...

Angular 17与Firebase全栈实战:从零构建现代化Web应用

1. 项目概述&#xff1a;一个基于 Angular 17 的现代化 Web 应用最近接手并重构了一个名为 Ditectrev 的 Web 项目&#xff0c;它本质上是一个功能性的前端应用&#xff0c;旨在解决特定领域的信息展示与交互需求。这个项目最初由 Angular CLI 17.3.17 生成&#xff0c;但原始的…...

香港科技大学(广州)的研究者如何让AI记忆力翻倍

这项由香港科技大学&#xff08;广州&#xff09;主导的研究成果发表于2026年第43届国际机器学习大会&#xff08;ICML 2026&#xff09;&#xff0c;会议地点为韩国首尔&#xff0c;论文收录于PMLR第306卷。论文预印本编号为arXiv:2605.05838&#xff0c;有兴趣深入了解的读者…...

【粉丝福利社】三维重建技术与实践:基于NeRF与3DGS

&#x1f48e;【行业认证权威头衔】 ✔ 华为云天团核心成员&#xff1a;特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯&#xff1a;CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋&am…...

苹果与伊利诺伊大学:四步AI绘图实现媲美五十步生成质量能力提升

这项由苹果公司&#xff08;Apple&#xff09;与伊利诺伊大学香槟分校&#xff08;UIUC&#xff09;联合开展的研究&#xff0c;于2026年5月以预印本形式发布在arXiv平台&#xff0c;论文编号为arXiv:2605.08078。研究提出了一种名为"正则化轨迹模型"&#xff08;Nor…...

多Agent协作是趋势,但谁来管这些Agent

如果你最近参加过AI相关的技术沙龙或者行业峰会&#xff0c;大概率会听到一个词&#xff1a;多Agent协作。简单说就是&#xff0c;不是一个AI帮你干完所有事&#xff0c;而是多个AI各司其职、互相配合。比如一个Agent负责理解需求&#xff0c;一个Agent负责写代码&#xff0c;一…...

设计器模版底图,一直渲染错误,是因为第一张图变形后内存中图片数据被改了,其他尺码一直错误

这其实是你们现在更需要的组合&#xff1a;不是只看 decode()&#xff0c;而是再确认“这次 decode 对应的还是当前这张图”。再确认“这次 decode 对应的还是当前这张图” 是怎么做到的&#xff0c;详细列举代码我直接从现在这次改动的代码里&#xff0c;把"确认图片身份…...

3分钟掌握RPG Maker资源解密:纯前端工具轻松破解加密文件

3分钟掌握RPG Maker资源解密&#xff1a;纯前端工具轻松破解加密文件 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https://gitc…...

本地部署9B代码智能体:基于vLLM与CoPaw-Flash的实践与深度评估

1. 项目概述&#xff1a;在本地部署与评估一个9B参数的代码智能体最近在折腾一个挺有意思的项目&#xff0c;尝试在单张NVIDIA H100 GPU上&#xff0c;部署并评估一个名为CoPaw-Flash-9B的本地代码智能体。这个模型基于Qwen3.5-9B微调而来&#xff0c;专门针对自主智能体任务进…...

Multi-Agent 落地常见问题:数据质量、模型适配与业务对齐解决方案

Multi-Agent 落地常见问题:数据质量、模型适配与业务对齐解决方案 引言 痛点引入:从「演示天堂」到「生产地狱」的Multi-Agent鸿沟 2023年11月OpenAI DevDay发布的GPT-4o Assistants API、LangChain团队迭代的LangGraph 1.0、Microsoft Research推出的AutoGen Studio 2.0,…...

BilibiliVideoDownload跨平台视频下载工具:从安装到高级配置的完整指南

BilibiliVideoDownload跨平台视频下载工具&#xff1a;从安装到高级配置的完整指南 【免费下载链接】BilibiliVideoDownload Cross-platform download bilibili video desktop software, support windows, macOS, Linux 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibil…...

全栈开发新范式:Vibe-Stack集成技术栈实战解析

1. 项目概述与核心价值 最近在探索全栈开发的新范式时&#xff0c;我注意到了 pastropsucez/vibe-stack 这个项目。乍一看这个名字&#xff0c;你可能会觉得有点“玄学”&#xff0c;但深入探究后&#xff0c;我发现它其实是一个高度集成、开箱即用的现代Web应用开发栈。简单…...

如何让老旧安卓电视焕发新生:mytv-android实现流畅播放体验的完整指南

如何让老旧安卓电视焕发新生&#xff1a;mytv-android实现流畅播放体验的完整指南 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android 你是否还在为家中那台反应迟钝、启动缓慢的旧电视而烦恼…...

BIThesis:让北京理工大学论文排版从烦恼变轻松的智能解决方案

BIThesis&#xff1a;让北京理工大学论文排版从烦恼变轻松的智能解决方案 【免费下载链接】BIThesis &#x1f4d6; 北京理工大学非官方 LaTeX 模板集合&#xff0c;包含本科、研究生毕业设计模板及更多。&#x1f389; &#xff08;更多文档请访问 wiki 和 release 中的手册&a…...

斯坦福CS229机器学习中文教程:从零到一的实战学习指南

斯坦福CS229机器学习中文教程&#xff1a;从零到一的实战学习指南 【免费下载链接】Stanford-CS-229 A Chinese Translation of Stanford CS229 notes 斯坦福机器学习CS229课程讲义的中文翻译 项目地址: https://gitcode.com/gh_mirrors/st/Stanford-CS-229 你是否曾因英…...

终极IDM试用重置指南:三步实现无限续期的免费解决方案

终极IDM试用重置指南&#xff1a;三步实现无限续期的免费解决方案 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset IDM Trial Reset是一款专为Internet Download Manager用户设计的实…...

RevokeMsgPatcher终极指南:3分钟实现微信/QQ/TIM永久防撤回

RevokeMsgPatcher终极指南&#xff1a;3分钟实现微信/QQ/TIM永久防撤回 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitco…...