Java会话技术

会话技术:

  • 会话指的是客户端浏览器和服务端之间的度偶次请求和响应
  • 当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。就像打电话只要不挂电话就是一次会话。
    会话过程中产生的数据可以通过会话技术CookieSession保存
会话管理作用:

最常见的就是购物车,登录成功后,把商品加入到购物车,此时我们无论再浏览什么商品,当点击购物车时,那些加入的商品都仍在购物车中,它是为我们共享数据用的,并且是在不同请求间实现数据共享。

什么时候用会话管理:

如果我们需要在多次请求间实现数据共享,就可以考虑使用会话管理技术。

会话管理分类:

客户端会话管理技术Cookie:

把共享的数据保存到客户端(也就是浏览器)。每次请求时,把会话信息带到服务器,从而实现多次请求的数据共享。

服务端会话管理技术Session:

本质仍是采用客户端会话管理技术,只不过保存到客户端的是一个特殊的标识,并且把要共享的数据保存到了服务端的内存对象中。每次请求时,把这个标识带到服务器端,然后使用这个标识,找到对应的内存空间,从而实现数据共享。

Cookie:

Cookie是客户端会话管理技术,把共享的数据保存到客户端(也就是浏览器)。每次请求时,把会话信息带到服务器,从而实现多次请求的数据共享

作用:

由客户端记录数据,可以保存客户浏览器访问网站的相关内容。从而在每次访问需要同一个内容时,先从本地缓存获取,使资源共享,提高效率。

Cookie的属性:
属性名称属性作用是否重要
namecookie的名称必要属性
valuecookie的值(不能是中文)必要属性
pathcookie的路径重要
domaincookie的域名重要
maxAgecookie的生存时间重要
versioncookie的版本号不重要
commentcookie的说明不重要
Cookie的限制:
  • 每个网站最多只能存20个cookie,大小不能超过4kb。
  • 所有网站的cookie总数不超过300个。
  • Cookie名称只能包含ASCCI码表中的字母,数字字符,不能包含逗号、分号、空格、不能以$开头
  • Cookie的值不能是中文

存活限制:

  • 负整数:当前会话结束浏览器关闭就立即清除Cookie
  • 0:立即清除
  • 正整数:以秒为单位设置存活时间

访问路径限制:

  • 默认路径:取自第一次访问路径资源前缀,只要以这个路径开头就能访问
  • 设置路径:setPath()方法设置指定路径
Cookie方法:
方法名作用
Cookie(String name,String value)构造方法创建对象
属性对应的get/set赋值和获取值

添加&获取:

返回值方法名说明
voidaddCookie(Cookie cookie)向客户端添加Cookie
Cookie[]getCookies()获取所有的Cookie

演示:

@WebServlet("/cookieDemo")
public class CookieDemo extends HttpServlet {
/**cookie的路径访问,只要是以前缀开头的包括子级路径都可以获取到,反之获取不到比如:/cookieDemo,只要是是前面是/cookieDemo后面是子级的话获取路径也可以,前缀不是就获取不到
*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html; charset=UTF-8");// 响应信息PrintWriter printWriter = resp.getWriter();printWriter.write("最后访问时间:<br>");// 创建Cookie对象,记录最后访问时间Cookie cookie = new Cookie("time", System.currentTimeMillis() + "");// 设置最大存活时间,不设置会话结束cookie结束cookie.setMaxAge(3600);// 把Cookie对象添加到客户端resp.addCookie(cookie);// 获取CookieCookie[] cookies = req.getCookies();// 判断Cookie是不是和name的名字相同for (Cookie c : cookies) {if ("time".equals(c.getName())) {// 是的话根据名字获取值,然后转解析字符串String value = c.getValue();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// Long.parseLong()将一个字符串转换成数字printWriter.write(sdf.format(new Date(Long.parseLong(value))));}}}
}

Session:

  • Session是服务端会话管理技术,是由服务端记录数据,本质仍是采用客户端会话管理技术,只不过保存到客户端的是一个特殊的标识,并且把要共享的数据保存到了服务端的内存对象中。每次请求时,把这个标识带到服务器端,然后使用这个标识,找到对应的内存空间,从而实现数据共享。也是四大域之一的会话域对象。
  • Session是Servlet规范中提供的一个接口。该接口的实现由Servlet规范的实现提供商提供,Tomcat服务器对Servlet规范进行了实现,用tomcat就不用管了。
  • 同时,它也是Servlet规范中四大域对象之一的会话域对象。并且它也是用于实现数据共享的和应用域和请求域是有区别的。
域对象作用范围使用场景
ServletContext整个应用范围当前项目中需要数据共享时,可以使用此域对象
ServletRequest当前请求范围在请求或者当前请求转发时需要数据共享可以使用此域对象
HttpSession会话返回在当前会话范围中实现数据共享。它可以在多次请求中实现数据共享
常用方法:
返回值方法名说明
voidsetAttribute(String name,Object value)设置共享数据
ObjectgetAttribute(String name)获取共享数据
voidremoveAttribute(String name)移除共享数据
StringgetId()获取唯一标识名称
voidInvalidate()让session立即失效
HttpSession获取:

HttpSession接口表示一个会话,可以把 会话的共享数据保存到HttSession里

返回值方法名说明
HttpSessiongetSession()获取HttpSession对象
HttpSessiongetSession(Boolean create)获取HttpSession对象,未获取到是否自动创建
HttpSession获取过程:

用户向服务器发送请求的时候,服务器会创建一个Session并加标识号,后面再请求的时候服务器就会根据唯一表示判断请求是哪个Session的

在这里插入图片描述

浏览器禁用Cookie:

解决方式:

  • 通过弹框提示信息告诉用户(这个方式是大部分网站常用的)
  • 访问时拼接Jsessionid标识,通过encodeURL()方法重写地址
钝化&活化:
  • 钝化:序列化,把长时间不用但是没有到期的HttpSession进行序列化写到磁盘上
  • 活化:正常状态
  • 什么时候钝化:
  • 当访问量很大,服务器会根据上一次访问时间排序,对长时间不使用但还没到期的HttpSession序列化当服务器重启的时候,为了保证HttpSession的数据也会序列化
    但是httpSession的序列化是由服务器自动完成的,不需要实现什么。

演示:

通过第一个Servlet设置共享数据用户名,并能在第二个Servlet获取到。

设置数据

@WebServlet("/sessionDemo01")
public class SessionDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 获取请求的用户名String username = req.getParameter("username");// 2. 获取HttpSession的对象HttpSession session = req.getSession();System.out.println(session);System.out.println(session.getId());// 3. 将用户信息添加到共享数据中session.setAttribute("username", username);}
}

获取数据

@WebServlet("/sessionDemo02")
public class SessionDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 获取HttpSession的对象,如果参数是false,获取不到的时候就不会创建新的CookieHttpSession session = req.getSession(false);System.out.println(session);System.out.println(session.getId());if (session == null) {resp.setContentType("text/html; charset=UTF-8");System.out.println("为了网站的正常访问,请不要禁止Cookie");}resp.getWriter().write("<a href='" + resp.encodeURL("http://localhost:8080/sessionDemo02") + "'>go SessionDemo02<a/>");// 2. 获取共享数据Object username = session.getAttribute("username");System.out.println(session);System.out.println(session.getId());// 3. 将数据响应到浏览器resp.getWriter().write(username + "");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【调用IP宏文件进行仿真】modelsim仿真时出现 Instantiation of 'xxx' failed. The design unit was not found....

出现错误类似&#xff1a;modelsim 仿真fifo时出现 Error: (vsim-3033) E:/Programs/ModelSim/fifo/ps2_fifo.v(75): Instantiation of scfifo failed. The design unit was not found.仿真波形不对&#xff0c;调用的ip核没有输出&#xff08;白色虚线&#xff09;等情况&…

Java Server Page

JSP JSP全称是Java Server Page&#xff0c;基于Java和Servlet一样是sun公司推出的一套开发动态web资源的技术&#xff0c;称为JSP/Servlet规范。JSP的本质其实就是一个Servlet。jsp是一种动态网页技术标准&#xff0c;jsp部署在服务器上可以处理客户端的请求&#xff0c;并根据…

HDFS概述(2)————Block块大小设置

参考&#xff1a;HDFS概述&#xff08;4&#xff09;————HDFS权限HDFS概述&#xff08;3&#xff09;————HDFS FederationHDFS概述&#xff08;2&#xff09;————Block块大小设置HDFS概述&#xff08;1&#xff09;————HDFS架构问题Q: 一个常被问到的一个问题是…

BZOJ 1083: [SCOI2005]繁忙的都市【Kruscal最小生成树裸题】

1083: [SCOI2005]繁忙的都市 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2925 Solved: 1927[Submit][Status][Discuss]Description 城市C是一个非常繁忙的大都市&#xff0c;城市中的道路十分的拥挤&#xff0c;于是市长决定对其中的道路进行改造。城市C的道 路是这样分…

Mysql介绍与安装LinuxmacOS系统

数据库&#xff1a; 用于存储和管理数据的仓库 数据库的好处&#xff1a; 可以持久化存储数据方便存储和管理数据使用了统一的方式操作数据库 – SQL 常见的数据库&#xff1a; Oracle&#xff1a;收费的大型数据库&#xff0c;Oracle公司的产品。Oracle收购SUN公司&#xff0c…

如何查看Laravel版本号的三种方法

1.PHP artisan --version 2.vim vendor/laravel/framework/src/Illuminate/Foundation/Application.php 3&#xff1a;可以写在路由里 5.4版本的路由文件夹是routes。我们可以写在routes\web.php里。 Route::get(laravel-version, function(){ $laravel app(); return…

02_反汇编_反编译

实际上安卓的应用都是zip包,只不过把zip扩展名修改了,修改成了APK.所以如果你想拿到它的图片的话,实际上特别简单&#xff0c;你就把它这个.apk换成.zip.换成.zip之后这里的图片资源就都可以拿到了. 有些公司可能美工的水平或者美工的人数比较少&#xff0c;项目还比较急&#…

SQL约束语法

约束 作用&#xff1a;对表中的数据进行限定&#xff0c;保证数据的正确性、有效性、完整性&#xff01; 约束分类&#xff1a; 约束说明PRIMARY KEY主键约束PRIMARY KEY AUTO_INCREMENT主键、自动增长UNIQUE唯一约束NOT NULL非空约束FOREIGN KEY外键约束FOREIGN KEY ON UPDAT…

修改项目名称之后,访问不到项目的问题

转载于:https://www.cnblogs.com/Joke-Jay/p/7190187.html

stanford-parser for C#

在项目里用到C#对英文句子进行词性标注。比較成熟的英文词性标注软件是stanford-parser。它个C#版本号&#xff0c;也是借助于IKVM完毕JAVA-C#的转换。详细配置过程例如以下&#xff1a; 1、下载stanford-parser的jar包 http://nlp.stanford.edu/software/lex-parser.shtml 2…

【bzoj】 1412: [ZJOI2009]狼和羊的故事

Description “狼爱上羊啊爱的疯狂&#xff0c;谁让他们真爱了一场&#xff1b;狼爱上羊啊并不荒唐&#xff0c;他们说有爱就有方向&#xff0e;&#xff0e;&#xff0e;&#xff0e;&#xff0e;&#xff0e;” Orez听到这首歌&#xff0c;心想&#xff1a;狼和羊如此和谐&am…

计算机基础--网络

互联网协议 互联网协议的功能&#xff1a;定义计算机如何接入internet&#xff0c;以及接入internet的计算机通信的标准。 互联网协议按照功能不同分为osi七层或者tcp/ip五层或tcp/ip四层 每层常见物理设备 因为学习python编程只需要了解tcp/ip五层模型&#xff0c;所以我们只需…

万字详解数据库连接池

数据库连接池的概念 数据库连接是一种关键的、有限的、昂贵的资源&#xff0c;这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性&#xff0c;影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连…

编译OSG的FreeType插件时注意的问题

使用自己编译的freetype.lib&#xff0c;在编译osgdb_freetype插件项目时&#xff0c;报错LINK错误&#xff0c;找不到png的一堆函数 最简单的方式是不要使用PNG编译freetype。记住不要犯贱。 转载于:https://www.cnblogs.com/coolbear/p/7205906.html

高动态范围红外图像压缩

BF&DRC 近期看了一篇高动态范围红外图像压缩的文章&#xff0c;《New technique for the visualization of high dynamic range infrared images》.这篇文章主要利用双边滤波器把宽动态红外图像切割为基本图像和细节图像&#xff0c;再分别对基本图像和细节图像进行处理。对…

Mybatis构建sql语法

构建sql&#xff1a; 之前通过注解开发时&#xff0c;相关 SQL 语句都是自己直接拼写的。一些关键字写起来比较麻烦、而且容易出错。MyBatis 给我们提供了 org.apache.ibatis.jdbc.SQL 功能类&#xff0c;专门用于构建 SQL 语句 常用方法&#xff1a; 查询功能的实现&#xf…

在cli命令行上显示当前数据库,以及查询表的行头信息

在$HIVE_HOME/conf/hive-site.xml文件下加入以下配置文件 <property><name>hive.cli.print.header</name><value>true</value><description>Whether to print the names of the columns in query output.</description> </proper…

SAS笔记(2) RETAIN语句

本文重点&#xff1a; 使用RETIAN,INPUT在每次循环执行时保留上一次PDV中的变量值。SUM语句和SET语句会自动RETAIN变量。1. RETAIN语句 1.1 Example 1 先来看看在DATA步不使用和使用RETAIN语句的差异 没有使用RETAIN: DATA WITHOUT_1;PUT "Before the INPUT statement: &…

Hive优化策略

hive优化目标 在有限的资源下&#xff0c;运行效率高。常见问题 数据倾斜、Map数设置、Reduce数设置等 hive运行 查看运行计划 explain [extended] hql 例子 explain select no,count(*) from testudf group by no; explain extended select no,count(*) from testudf group …

GPU性能实时监测的实用工具

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…