servlet-会话(cookie与session)
servlet会话技术
- 会话技术
- cookie
- 创建Cookie
- index.jsp
- CookieServlet
- 获取Cookie
- index.jsp
- showCookie
- session
- 创建session
- index.jsp
- login.jsp
- LoginServlet
- 获取session
- RedurectServket
- 清除会话
- login.jsp
- ClearItmeServlet
会话技术
两种会话:cookie,session
- 会话:当用户打开浏览器的时候,访问不同的资源( url ),用户将浏览器关闭,可以认为这是一次会话.
- 作用:http 协议是一个无状态的协议, http 记录不了上次访问平台时间等信息的;用户在访问过程中可能会产生一些数据,所以通过 cookie 会话将常用数据保存起来
如:用户登录( session 用得最多,信息保存安全),访问记录( cookie 会话使用多,保存信息不关乎安全) - 分类:
cookie:浏览器端会话技术[针对浏览器,安全系数低](记录常用信息,又不影响安全的信息)
session:服务器端会话技术[针对服务器,安全性高](主要:用户登录)
cookie
cookie 是由服务器生成,通过 response 将 cookie 写回浏览器,保留在浏览器上,下一次访问,浏览器根据一定规则携带不同的 cookie (通过 request 的头 cookie ),服务器就可以接收到对应的cookie【如准考证号,唯一性】。
1).cookie 创建:
new Cookie(String key,String value)
2).写回至浏览器:
response.addCookie(Cookie c)
3).获取 cookie(数组):
Cookie[] request.getCookies()
4).cookie 常用方法:
getName():获取 cookie 的 key(名称)
getValue:获取 cookie 值
创建Cookie
index.jsp
<a href="<%=request.getContextPath()%>/creatCookie">创建Cookie</a>
CookieServlet
@WebServlet(name = "creatCookie", value = "/creatCookie")
public class CookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");//创建CookieCookie id = new Cookie("id", "1");Cookie shop = new Cookie("shop", "XIAOMI");
// 如果 cookie 需要写入中文,用 new Cookie("aNameKey", URLEncoder.encode("李","utf-8"));方式
// 如果取 cookie 中文值用 URLDecoder.decode(cookie.getValue(), "UTF-8");Cookie shopNmae = new Cookie("shopName", URLEncoder.encode("小米","utf-8"));//回显到浏览器response.addCookie(id);response.addCookie(shop);response.addCookie(shopNmae);response.getWriter().append("Cookie已创建");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}
}

获取Cookie
index.jsp
<a href="<%=request.getContextPath()%>/creatCookie">创建Cookie</a><br><a href="<%=request.getContextPath()%>/showCookie">获取cookie值</a>
showCookie
@WebServlet(name = "showCookie", value = "/showCookie")
public class ShowCookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");Cookie[] cookies = request.getCookies();for (Cookie cookie : cookies){
// 如果 cookie 需要写入中文,用 new Cookie("aNameKey", URLEncoder.encode("李","utf-8"));方式
// 如果取 cookie 中文值用 URLDecoder.decode(cookie.getValue(), "UTF-8");
//回显到浏览器response.getWriter().append(cookie.getName() + "==" + URLDecoder.decode(cookie.getValue(),"utf-8")).append("<br>");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

session
1).服务器( tomcat )端会话技术
2).获取一个session:
HttpSession request.getSession()
3).域对象:
xxxAttribute(setAttribute,getAttribute)
销毁:
a).服务器非正常关闭(突然宕机)
b).session 超时
默认时间超时:30分钟 tomcat 里的 web.xml 有配置
手动设置超时:setMaxInactiveInterval(秒)
c).手动编写清除 session 会话方法:
清除所有:session.invalidate();
清除单个:session.remove(“username”);(掌握)
创建session
index.jsp
<a href="<%=request.getContextPath()%>/creatCookie">创建Cookie</a><br><a href="<%=request.getContextPath()%>/showCookie">获取cookie值</a><br><a href="login.jsp">登录</a>
login.jsp
<form action="<%=request.getContextPath()%>/login" method="post"><label>用户名:</label><input type="text" name="username"><br><label>密码:</label><input type="password" name="password"><br><input type="submit" value="登录"></form><br><a href="/f_session/cleitme">清空itme会话</a>
LoginServlet
@WebServlet(name = "login", value = "/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置编码request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");//获取login.jsp传递的参数String username = request.getParameter("username");String password = request.getParameter("password");//假定数据库存有两个对象List<User> users = new ArrayList<>();users.add(new User("zhangsan", "123"));users.add(new User("lisi","1234"));if(users.size()>0){//判断数据库中是否有数据for (User user : users) {//遍历数据库if (user.getUsername().equals(username) && user.getPassword().equals(password)) {//创建sessionHttpSession session = request.getSession();//设置域对象session.setAttribute("usersession", user);response.sendRedirect(request.getContextPath() + "/redu");}}}}
}
获取session
RedurectServket
@WebServlet("/redu")
public class RedurectServket extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获得sessionHttpSession session = request.getSession();//获得域对象数据User ussess = (User) session.getAttribute("usersession");response.getWriter().append(ussess.getUsername()+",===,"+ussess.getPassword());System.out.println("执行方法");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}
}


清除会话
login.jsp
<form action="<%=request.getContextPath()%>/login" method="post"><label>用户名:</label><input type="text" name="username"><br><label>密码:</label><input type="password" name="password"><br><input type="submit" value="登录"></form><br><a href="<%=request.getContextPath()%>/cleitme">清空itme会话</a>
ClearItmeServlet
@WebServlet("/cleitme")
public class ClearItmeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");HttpSession session = request.getSession();//session.invalidate()//手动清空所有session.removeAttribute("usersession");//工作时使用这样指定方式移除以避免会话全部清空response.getWriter().print("usersession此会话已清除");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}
}

相关文章:
servlet-会话(cookie与session)
servlet会话技术 会话技术cookie创建Cookieindex.jspCookieServlet 获取Cookieindex.jspshowCookie session创建sessionindex.jsplogin.jspLoginServlet 获取sessionRedurectServket 清除会话login.jspClearItmeServlet 会话技术 两种会话:cookie,sessi…...
windows11忘记登录密码怎么办?
STEP1:进入Win RE界面 1.按住shift不要松手,点击重新启动,进入WINRE界面 2.选择疑难解答 选择高级选项 点击命令提示符 STEP2:替换utilman 1.输入以下代码查看所在windows所在盘 diskpart list volume exit 2.根据所在盘输入命令(以C盘为…...
C#里如何设置输出路径,不要net7.0-windows
官网介绍: 更改生成输出目录 - Visual Studio (Windows) | Microsoft Learn <PropertyGroup> <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> <AppendRuntimeIdentifierToOutputPath>false</Appen…...
知名员工上网行为管理系统推荐榜单
上网行为管理软件旨在帮助组织监控和管理员工的网络活动,以提高工作效率、确保网络安全和合规性。以下是一些常见的上网行为管理软件: Ping32:Ping32是一款专业的员工上网行为管理系统,Ping32作为一款专业的员工上网行为管理系统&…...
第12章 软件测试基础(第三部分)测试类型、测试工具
七、测试类型(按工程阶段划分) 单集系确收 (一)单元测试 1、单元测试/模块测试 单元就是软件中最小单位(或模块)。可以是一个函数、一个过程、一个类。主要依据是模块的详细设计文档。价值在于尽早发现…...
open-vm-tools使用虚机的拷贝/粘切
open-vm-tools 是一组用于 VMware 虚拟机中的开源工具,它们提供了一些与虚拟机操作和管理相关的功能。这些工具与 VMware 虚拟化平台集成,可以在虚拟机中提供更好的性能和功能。以下是一些 open-vm-tools 提供的功能: 1. 虚拟机增强功能: open-vm-tools 提供了与 VMware 虚…...
CKEditor编辑器的简单使用方法,取值,赋值
先从官网下载包。CKEditor 4 - Download Latest Version. 一:在项目里引用JQ基础包和CK的JS包 <script src"/JS/jquery-3.4.1.js?v1.0"></script><script src"/ckeditor/ckeditor.js"></script> 二:在表…...
创建一个线程对象需要花费多少内存空间
创建一个std::thread对象所需的内存空间大小并不是固定的,因为它取决于多种因素,包括C运行时库的实现、编译器优化、以及可能的平台和架构差异。 std::thread对象本身是一个轻量级的控制块,它主要用于管理线程的执行,包括保存线程…...
Java -- (part23)
一.网络编程 1.概述 在网络通信协议下,不同计算机上运行的程序,进行数据传输 2.软件架构 CS架构:客户端和服务端 BS架构:浏览器和服务端 3.服务器概念 安装了服务器软件的计算机 4.通信三要素 IP地址 a.概述 计算机的唯一标识,用于两台计算机之间的链接 b.特殊的IP…...
1. C++入门:命名空间及输入输出
C相比C的变化 兼容C面向对象泛型C的不足的弥补 为什么要有命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地…...
【Kotlin】Java三目运算转成 kotlin 表达
这行代码会直接计算 array.size 1 的布尔值,并将其赋值给 result。在 Kotlin 中,不需要使用三元操作符,因为条件表达式本身就返回一个布尔值 java 中三木运算: int [] array new int[]{1, 2, 3, 4, 5}; boolean test array &g…...
如何安全可控地进行内外网跨网络传输文件?
跨网络传输文件通常指的是在不同的网络环境之间移动数据,这在现代企业运营中非常常见。随着网络技术的高速发展,为了有效地保护内部的核心数据资产,企业一般会采用内外网隔离的策略。在进行内外网跨网络传输文件时,需要考虑多种因…...
Python Json数据解析
本篇主要介绍Python 中json数据如何解析、转化、保存和加载。 目录 Json数据解析 概念 作用 Json文件组成 Json转化为Python数据类型 Python数据类型转化为json 写入本地json文件 读取本地的json文件 总结 Json数据解析 概念 一种保存数据的格式 作用 可以保存本地…...
pyinstaller打包pytorch和transformers程序
记录使用pyinstaller打包含有pytorch和transformers库的程序时遇到的问题和解决方法。 环境和版本信息 操作系统:Windows 11 Python:3.10.12 pyinstaller:5.13.0 torch:2.2.2 transformers:4.40.1 打包过程和问…...
西门子数控网络IP设定配置
总结:menuselect-诊断-屏幕下方右翻页找到tcp/ip,进去选择tcp/ip诊断,进去选择x130网口,点击更改, 如果没有更改,menuselect-调试-口令,输入口令 sunrise 然后重新配置tcp/ip,配置完…...
[Unity]备份许可文件
原因:因Unity需要重新恢复出厂设置,所以需要先将许可文件本分到本地,以便重新初始化后输入许可。 1)登录管理网络web界面,在服务页面打开SSH 2)ssh到管理网络,使用service用户登录 3…...
第十五届蓝桥杯省赛大学B组(c++)
很幸运拿了辽宁赛区的省一,进入6月1号的国赛啦... 这篇文章主要对第十五届省赛大学B组(C)进行一次完整的复盘,这次省赛2道填空题6道编程题: A.握手问题 把握手情景看成矩阵: 粉色部分是7个不能互相捂手的情况 由于每个人只能和其他人捂手, 所以黑色情况是不算的 1和2握手2和…...
Python Flask框架(一)初识Flask
Flask是使用Python编写的Web微框架。Web框架可以使我们不用关心底层的请求响应处理,更方便高效的编写Web程序。Flask有两个主要依赖,一个是WSGI(Web Server Gateway Interface,web服务器网关接口)工具集,另…...
VS2022 .Net6.0 无法打开窗体设计器
拿Vs2022 建了个Demo,运行环境是net6.0-windows,无论双击或是右键都打不开窗体设计器 打开项目目录下的*.csproj.user <?xml version"1.0" encoding"utf-8"?> <Project ToolsVersion"Current" xmlns"htt…...
Linux学习之高级IO
之前的内容我们基本掌握了基础IO,如套接字,文件描述符,重定向,缓冲区等知识都是文的基本认识,而高级IO则是指更加高效的IO。 对于应用层,在读写的时候,本质就是把数据写给OS,若一方…...
手把手教你用YOLACT训练自己的数据集:从COCO格式准备到模型推理全流程(附Python源码)
YOLACT实战指南:从数据标注到工业级实例分割模型部署 1. 实例分割技术演进与YOLACT核心优势 在计算机视觉领域,实例分割一直被视为目标检测与语义分割的结合体。不同于简单的边界框检测或像素级分类,实例分割要求算法能够区分同一类别的不同个…...
别再为版本号头疼了!手把手教你搞定Windows上ChromeDriver与Chrome的版本匹配(附最新镜像源)
别再为版本号头疼了!手把手教你搞定Windows上ChromeDriver与Chrome的版本匹配 每次启动Selenium脚本时看到SessionNotCreatedException报错,就像在高速公路上突然爆胎——明明昨天还能正常运行的自动化测试,今天就因为Chrome自动更新而彻底罢…...
别再手动reshape了!用einops.rearrange优雅处理PyTorch张量维度(附实战代码)
用einops.rearrange重塑PyTorch张量:告别混乱的维度操作 深度学习开发中最令人头疼的莫过于张量维度的变换。你是否曾在凌晨三点盯着屏幕,试图理解自己昨天写的permute和reshape组合到底在做什么?或者花费半小时调试一个维度不匹配的错误&…...
Labelme版本不兼容报错?手把手教你修改源码和JSON文件(附3.18.0与4.5.6对比)
Labelme版本兼容性实战:从源码修改到JSON批量处理的完整指南 当你正专注于一个重要的数据标注项目,突然遭遇"Error opening file lineColor"的红色报错框,整个团队的标注进度被迫停滞——这种场景对于使用Labelme进行图像标注的开发…...
抖音批量下载神器:一键保存多个创作者的所有视频作品
抖音批量下载神器:一键保存多个创作者的所有视频作品 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 在当前短视频内容爆炸的时代,抖音汇聚了无数创意视频和优质内容。无论是学习舞蹈…...
掌握C TCP通信:高效实现服务端与客户端数据交互
掌握C# TCP通信:高效实现服务端与客户端数据交互 【下载地址】CTcp通信实战服务端与客户端的数据交互包括指定终端发送与群发功能 本资源提供了一套完整的C#编程解决方案,用于实现TCP协议下的网络通信。通过此示例,您将学习如何在C#应用中搭建…...
猫抓浏览器扩展终极指南:高效捕获网页视频与流媒体资源的专业解决方案
猫抓浏览器扩展终极指南:高效捕获网页视频与流媒体资源的专业解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(…...
浏览器指纹JS逆向全解析:Canvas、WebGL与Audio指纹绕过
在当前的反爬虫与风控体系中,浏览器指纹技术已成为识别自动化工具的核心手段。传统的UserAgent、IP地址等信息早已不足为凭,而基于Canvas、WebGL、AudioContext等API生成的“渲染层指纹”,因其高度依赖硬件和系统环境,具备极强的唯…...
技能图谱:构建结构化知识体系,实现高效学习与成长
1. 项目概述:一个技能图谱的诞生与价值在技术社区里,我们经常看到各种“Awesome List”——那些按领域整理的工具、库和资源清单。它们很有用,但总感觉缺了点什么。直到我偶然在 GitHub 上看到了tenequm/skills这个仓库,它给我带来…...
CLI工具集claw:模块化设计与插件化架构深度解析
1. 项目概述:一个面向开发者的现代化CLI工具集最近在GitHub上看到一个名为opsyhq/claw的项目,第一眼就被它简洁的名字吸引了。claw,中文意思是“爪子”,听起来就很有力量感和抓取感。点进去一看,果然,这是一…...
