33、JAVA_WEB开发基础之会话机制

会话是什么

一个客户端浏览器与web服务器之间连续发生的一系列请求和响应过程就是会话,这些过程中产生的一系列信息就是会话信息,会话机制就是用于维护这些信息一致性的一种技术。通俗的说就是,一个A账号访问服务器,进行多次交互产生了一些信息,对于无状态Http协议来说,每来一次请求他都会处理一次,认为是一次新客户端的请求,所以他没有办法维护这些信息的一致性,所以便出现了会话这一概念,有了会话技术,就可以记录下A与服务器交互产生的信息。

如何实现

现在基本都是HTTP协议,而HTTP协议是没有状态的,所以无法记录多个请求下的一系列信息,所以就需要借助一些技术来维护服务器和浏览器之间的会话信息,这里有两种技术,分别是:Cookie和Session。

Cookie会话技术

cookie采用在客户端保持http状态信息的方案,通过将状态信息保存在客户端来保持会话状态。cookie是浏览器访问web服务器的某个资源时,由web服务器在http响应消息头中附带传送给浏览器的小文本文件。当发生交互时,web服务器通过在http相应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在http请求消息中增加Cookie请求头字段将Cookie回传给web服务器,使用cookie头字段来确认交互属于同一会话过程。

cookie的工作过程图示如下:

客户端一方会将cookie信息如何存储呢?这里说一下,cookie信息可以被存储在浏览器内存中,当关闭浏览器时,cookie就失效,这就是会话cookie;也可以通过设置将cookie信息存放在客户端主机的磁盘中,这就是持久化cookie。

cookie保持会话状态工作原理代码体现如下:

// 获取客户端的cookie
Cookie[] cookies = request.getCookies();
// 如果有cookie
if (cookies != null && cookies.length > 0) {for (Cookie c : cookies) {//获取cookie名String name = c.getName();//获取cookie值String value = c.getValue();if ("cookie_id_one".equals(name) && "123456".equals(value)) {//可以保持会话}}
}else{//客户端还没有cookie值,传回一个// 将cookie由服务器返回给客户端Cookie cookie = new Cookie("cookie_id_one", "123456");// 设置最大失效是时间是3600秒 ,若为负数则表示不存储这个cookiecookie.setMaxAge(3600);response.addCookie(cookie);
}

Session会话技术

session采用在服务器端保持http状态信息的方案,通过将状态信息保存在服务器端来保持会话状态。其工作原理大致为:服务器检查客户端传来的请求中是否包含一个sessio标识,如果已经包含,服务器就按照此sessioid检索出此用户信息,如果请求中不包含sessionid,服务器则创建一个sessionid并发送给客户端保存,使用JSESSIONID来表示。

session的工作原理图如下所示:

说一个概念,session cookie,他和上边的cookie不同,他指的是sessionid在客户端保存时的一个参数标记,服务器传送sessionid到客户端时,会创建一个JSESSIONID,它的值就是sessionid,JSESSIONID存储在session cookie中,session cookie存在于浏览器的内存中,所以当浏览器关闭时,session cookie就消失了,而服务器端的session对象不会消失。

java中使用HttpSession来表示session会话,他的基本方法如下:

//使用请求对象创建会话对象
HttpSession session = request.getSession();
//获取到sessionId
String sessionId = session.getId();
if (sessionId != null && sessionId != "") {//设置超时时间session.setMaxInactiveInterval(6000);//可以直接销毁此sessionid以结束此次会话session.invalidate();//获取sessionIDsession.getId();//等等
}

 

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

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

相关文章

35、JAVA_WEB开发基础之过滤器

是什么 过滤器javaweb的一个重要组件,一种规范,可以对发送到serlvet的请求进行拦截和响应进行过滤。实际开发中可以使用过滤器来对访问服务器的请求进行过滤,以提高安全性 过滤器的原理 可以配置过滤器对指定的请求进行过滤,就…

2、安装和连接mysql

安装mysql 1、官网下载mysql 下载网址:https://www.mysql.com/ 2、解压并配置mysql 解压下载的(前提下载的zip版本的mysql)mysql安装包,放到指定磁盘 配置环境变量:将mysql下的bin目录的全路径名配置到环境变量的p…

6、mysql中字段

对数据表的操作是比较重要的,在实际开发中,日常做的主要工作就是对数据表的操作 对数据表的操作分为两大部分:操作数据表的结构、操作数据表中的数据 组成数据表的基本单元就是字段,所以,接下来先介绍一下mysql中的字…

在Linux环境下使用Apache部署ASP.NET Core

在前几篇文章中我们一起探讨了如何在Linux环境中安装ASP.NET Core运行时环境及将ASP.NET Core项目部署在Jexus中,这篇文章中我们将探讨如何将ASP.NET Core部署于Apache(阿帕奇)中。 很幸运能够和大家一起学习和探讨ASP.NET Core本文章运行…

傲娇码农的自我修养

一个热爱自己职业的人一定会对自己的工作充满自豪感,同样,也应该对自己的工作充满热情和自信。对自己的专业能力骄傲而不自满。身为一个码农,如果你热爱自己的工作,我想,你很有可能也是一位傲娇码农。在我的眼里&#…

中国到底有多少个.NET 程序员?都在哪个城市写代码?

中国到底多少个.NET 程序员,对于这个问题,似乎没有一个准确的答案,而且最近很多使用.NET 开发技术的老板在抱怨找不到.NET 开发人员,所以我想基于我的公众号粉丝数据给大家分享下中国的.NET程序员到底有多少,他们也都是…

微软西雅图总部DevOps交流总结

本文转自Study4台湾社区。Study4台湾社区,成立于2011/9/25,希望藉由社群推广的力量,让台下的朋友听到来自不同县市的大师讲课,也让台上年轻一辈的技术传教士能不断的琢磨并且追上大师这是一个社群,社区希望透过分享&am…

C# 快速高效率复制对象另一种方式 表达式树

一、需求在代码中经常会遇到需要把对象复制一遍,或者把属性名相同的值复制一遍。比如:public class Student{public int Id { get; set; }public string Name { get; set; } public int Age { get; set; } }public class StudentSecond{public int Id { …

用C# (.NET Core) 实现抽象工厂设计模式

本文的概念性内容来自深入浅出设计模式一书.上一篇文章讲了简单工厂和工厂方法设计模式 使用的是披萨店的例子. 文将继续使用这个例子, 这里要用到抽象工厂.披萨店的需求变更现在披萨店在各地授权了很多连锁分店, 但是有的分店偷工减料, 使用劣质原料代替标准原料.披萨店老板现…

14、mysql中事务的应用

是什么 事务是一种保护连续操作同时满足(实现)的一种机制,用来保护数据的完整性,只适用于数据操作,不适用于结构操作,只有 innodb引擎的表具有事务安全的机制。就是说,在一个事务中做一系列的…

Summer Training day4 欧拉降幂

Input2 Output2Hint 1. For N 2, S(1) S(2) 1.2. The input file consists of multiple test cases. Sample Input2 Sample Output2这道题的公式非常简单,就是求2^(N-1) %1e97 由于N实在是太大了,不能直接求快速幂,考虑到2^x % MOD是有循…

Project Honolulu 正式版发布为 Windows Admin Center

微软今天正式发布了 Project Honolulu 的正式版,其正式的名称为 Windows Admin Center,gOxiA 之前一直在这个 TAP 中,从 1711 到 1804 可以看出微软现在的开发速度之快,从测试情况看 WAC 质量非常高。正如之前日志说讲 Windows Ad…

使用C# (.NET Core) 实现命令设计模式 (Command Pattern)

本文的概念内容来自深入浅出设计模式一书.项目需求有这样一个可编程的新型遥控器, 它有7个可编程插槽, 每个插槽可连接不同的家用电器设备. 每个插槽对应两个按钮: 开, 关(ON, OFF). 此外还有一个全局的取消按钮(UNDO).现在客户想使用这个遥控器来控制不同厂家的家用电器, 例如…

Summer Training day4上帝与集合的正确用法 欧拉函数+降幂公式

这个题的指数太大了&#xff0c;因此要考虑用降幂公式进行降幂 记f(p) 2^2^2... % p f(p) 2^(2^2^2...%phi(p) phi(p)) % p 2^(f(phi(p)) phi(p)) % p 到这里我们得到了一个递推方程&#xff0c;边界f(1) 0 #include <iostream> #include <cstdio> #inclu…

把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

Net Core 大量使用依赖注入(Dependency Inject), 打个比方,我们常用的日志组件有Log4Net,NLog等等.如果我们要随时替换日志组件,那么代码中就不能直接引用某个组件的内容,也不能直接New 某个组件.而是应该定义一组接口, 然后包装各个组件,实现这个接口. Net Core 自带组件容器,…

开源纯C#工控网关+组态软件(九)定制Visual Studio

一、 引子因为最近很忙&#xff08;lan&#xff09;&#xff0c;很久没发博了。不少朋友对那个右键弹出菜单和连线的功能很感兴趣&#xff0c;因为VS本身是不包含这种功能的。大家想这是什么鬼&#xff0c;怎么我的设计器没有&#xff0c;其实这是一个微软黑科技&#xff0c;…

19、mysql中定时器的创建和使用

mysql中可以使用定时器&#xff0c;用来进行计划的调度&#xff0c;在mysql中定时器通过事件的形式存在&#xff0c;接下来介绍一下定时器的使用 创建定时器 CREATE EVENT IF NOT EXISTS 计划名-- 计划频率和开启计划时间或者是计划执行的时间-- 前一个可以实现持续的计划调度…

使用C#实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

本文的概念内容来自深入浅出设计模式一书现实世界中的适配器(模式)我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器.面向对象的适配器你有个老系统, 现在来了个新供应商的类, 但是它们的接口不同, 如何使用这个新供应商…

在 .NET Core 中使用 DiagnosticSource 记录跟踪信息

前言最新一直在忙着项目上的事情&#xff0c;很久没有写博客了&#xff0c;在这里对关注我的粉丝们说声抱歉&#xff0c;后面我可能更多的分享我们在微服务落地的过程中的一些经验。那么今天给大家讲一下在 .NET Core 2 中引入的全新 DiagnosticSource 事件机制&#xff0c;为什…

.NET:持续进化的统一开发平台

标题使用的是进化这个词语&#xff0c;是因为 .NET 在不断的努力&#xff0c;也在不断的重构。这篇文章的更多目的和意义在于科普&#xff0c;俗称“传教”。持续进化的 .NET上图即是一个学习的路线图同样他也是 .NET 平台的进化图。也是代表着 未来.NET的发展方向。今天的故事…