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: 一个常被问到的一个问题是…

PTA 01-复杂度2 Maximum Subsequence Sum (25分)

题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/663 5-1 Maximum Subsequence Sum (25分) Given a sequence of KK integers { N_1N​1​​, N_2N​2​​, ..., N_KN​K​​ }. A continuous subsequence is defined to be { N_iN​i​​, N_{i1}N​i1​​, ..…

Listener

观察者设计模式&#xff1a; 它是事件驱动的一种体现形式。就好比在做什么事情的时候被人盯着。当对应做到某件事时&#xff0c;触发事件。 观察者模式通常由以下三部分组成&#xff1a; ​1. 事件源&#xff1a;触发事件的对象。 2.​ 事件&#xff1a;触发的动作&#xff0c;…

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…

最全的Mysql数据类型

数值类型&#xff1a; 类型大小范围&#xff08;有符号&#xff09;范围&#xff08;无符号&#xff09;用途Bit1bytes-128 ~ 120 ~ 255小整数值TINYINT1 byte-128 ~ 1270 ~ 255小整数值SMALLINT2 bytes-32768 ~ 327670 ~ 65535大整数值MEDIUMINT3 bytes-8388608 ~ 83886070 ~…

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…

hdu 2489 Minimal Ratio Tree

https://vjudge.net/problem/HDU-2489 题意&#xff1a;求一个完全图的最优比率生成树&#xff0c;点的个数由题给出。最优比率生成树是边的权值之和与点的权值之和的比值最小的生成树。 思路&#xff1a;一开始用dfs枚举搜索每一种情况&#xff0c;t了&#xff0c;枚举的情况太…

SQL多表关联

多表关联&#xff1a; 多张数据表之间是可以有一定的关联关系&#xff0c;这种关联关系可以通过外键约束实现 多表的分类&#xff1a; 一对一一对多多对多 一对一&#xff1a; 一张表对应一张表 适用场景举例&#xff1a; 人和身份证。一个人只能有一个身份证&#xff0c;一个身…

背包问题 codevs2210 数字组合

数字组合 题目描述 Description在N个数中找出其和为M的若干个数。先读入正整数N和M&#xff0c; 再读入N个正数&#xff08;可以有相同的数字&#xff0c;每个数字均在1000以内&#xff09;&#xff0c; 在这N个数中找出若干个数&#xff0c; 使它们的和是M&#xff0c; 把满足…

SQL多表查询

多表查询分类&#xff1a; 内连接查询 显式内连接隐式内连接 外连接查询 左外连接右外连接 子查询自关联查询 准备数据&#xff1a; -- 创建user表 CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT, -- 用户idNAME VARCHAR(20), -- 用户姓名age INT …

HTTP协议整理

一、概念 1.HTTP协议&#xff1a;即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和Web服务器之间互相通信的规则&#xff0c;它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。它可以使浏览器更加高效&#xff0c;使网络传输减少。…

【DDD】--好文收藏

索引&#xff1a; 目录索引 发现一批好文&#xff0c;完整系列&#xff0c;攒~~ 随笔分类 - DDD - 『圣杰』 DDD理论学习系列&#xff08;1&#xff09;-- 通用语言 笔记&#xff1a; 通用语言&#xff1a; a) 简单&#xff0c;便于理解、传播。 b) 需要通用&#xff0c;能够准…

SQL存储过程、存储函数

概念&#xff1a; 存储过程和函数&#xff1a; 存储过程和函数是事先经过编译并存储在数据库中的一SQL语句的集合 存储过程和函数的好处&#xff1a; 存储过程和函数可以重复使用&#xff0c;减轻开发人员的工作量。类似于java中方法可以多次调用减少网络流量&#xff0c;存储…

meta http-equiv=X-UA-Compatible content=IE=edge,chrome=1 /

X-UA-Compatible是针对IE8新加的一个设置&#xff0c;对于IE8之外的浏览器是不识别的&#xff0c;这个区别与content"IE7"在无论页面是否包含<!DOCTYPE>指令&#xff0c;都像是使用了 Windows Internet Explorer 7的标准模式。而content"IEEmulateIE7&quo…

错误页跳转

错误页跳转的语法 <%page errorPage"出现错误跳转页面"%> <%page isErrorPage"true/false%>跳转到此页面进行处理错误 代码如下&#xff1a; <%page language"java" contentType"text/html" pageEncoding"GBK"%&g…