会话是什么

一个客户端浏览器与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();//等等
}

33、JAVA_WEB开发基础之会话机制相关推荐

  1. 36、JAVA_WEB开发基础之监听器

    是什么 顾名思义就是监听器就是监听器,在开发中指的是一种机制,通过这种机制可以对应用中组件的创建.销毁.更改等动作进行监视,根据具体监听信息作出相应的处理 工作原理 就是预先给组件添加一个事件,当这个 ...

  2. 30、JAVA_WEB开发基础之servlet(1)

    servlet是什么 Servlet 是一种独立的 web 开发标准,用来接受.处理.返回浏览器的访问请求,它不应和服务器耦合在一起,servlet和servlet容器之间相互独立又相互依存,自我感觉 ...

  3. 35、JAVA_WEB开发基础之过滤器

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

  4. 31、JAVA_WEB开发基础之servlet(2)

    使用servlet需要依赖jar包:servlet-api.jar,下边介绍一下关于servlet的一些api Servlet接口 package javax.servlet;import java. ...

  5. 32、JAVA_WEB开发基础之jsp

    是什么 是简化servlet的一种技术,将html语句和java代码混合在一个文件中进行编写,只对网页中动态产生的内容用java代码编写,静 态内容仍用html语句编写 运行原理 jsp本质上是一个s ...

  6. 39、JAVA_WEB开发基础之ajax和json

    ajax是什么 首先要知道ajax并不是一种新的技术,而是几种技术的强强联合,全称是Asynchronous Javascript and xml,其精髓在于异步加载资源,因此可以实现局部加载效果(因 ...

  7. 38、JAVA_WEB开发基础之下载功能

    是什么 下载指的是将服务器端的文件保存到客户端的磁盘中 基本实现原理 根据对应的要下载的文件在服务器端找到对应的文件,然后获取到文件流对象,将流对象发送到客户端,然后客户端通过对返回结果中文件流的解析 ...

  8. 37、JAVA_WEB开发基础之上传功能

    是什么 上传指的是将客户端的文件保存到服务器的磁盘中 基本实现原理 读取客户端的文件信息,将文件信息以流的形式发送到服务器,然后服务器将流中的信息保存到本地,以实现文件的上传 实例 注意:提交的表单类 ...

  9. 34、JAVA_WEB开发基础之EL表达式和标签

    EL表达式是什么 一种从域对象中获取数值的简化写法,el表达式语法格式为:${域对象.参数名} 使用方式 取出request范围内的参数:{pageContext.request.username} ...

最新文章

  1. 网络工程师_TCP握手之类的
  2. qt调用linux 进程,Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)
  3. [原]Oracle删除大表并回收空间的过程
  4. Cubieboard2裸机开发之(四)定时器操作
  5. [转] getBoundingClientRect判断元素是否可见
  6. linux颜色吸取工具,8 个优秀的 Linux 图形图像及色彩工具
  7. 使用GetDIBts/SetDIBits高速逐点处理 from http://blog.sina.com.cn/s/blog_552ad2090100e3eu.html...
  8. 深入理解vue中的slot与slot-scope
  9. mysql导入创建表空间_oracle创建表空间 用户 数据库导入和导出(转)
  10. C语言-数组a 和a 的区别
  11. NSURLConnection 下载数据 -- IOS(实例)
  12. Linux uart驱动框架
  13. tia v15 添加项目_基于博途V15 西门子S7-1200 星三角启动实例演示
  14. 熟识三菱PLC编程基本指令
  15. 23_Open_Loop
  16. MySQL批量插入测试数据
  17. Java 邮政EMS快递面打印实现 笔记
  18. matlab单枝节匹配器,第八讲微带匹配电路单枝节匹配电路.ppt
  19. 郭麒麟任《最强大脑》见证官,住杭州的台湾人清华学霸吴哲维来了
  20. SQL 清空数据库的所有表数据

热门文章

  1. golang 切片 接口_Golang语言常用关键字之 make 和 new
  2. java实用教程——组件及事件处理——ItemEvent事件(设置字体类型)
  3. c++向mysql通信_C++连接MySQL
  4. leetcode968. 监控二叉树
  5. [Redis6]跳跃表(跳表)
  6. 图的建立-邻接表表示(C语言)
  7. linux不能更改密码,Linux服务器无法更改密码的解决办法--passwd: User not known
  8. github 检查代码质量_Android(8): 代码质量检查
  9. Leetcode 35.搜索插入位置 二分
  10. Codeforces Round #305 (Div. 1) D. Mike and Fish 欧拉回路