认识Session机制

前文也提到过,常用的会话跟踪有两种技术:Cookie和Session。今天就为大家讲解一下Session机制。

什么是Session?

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

实现用户登录

Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。Session也是一个key-value属性对,通过getAttribute(String key)和setAttribute(String key,Object value)方法读写客户状态信息。

Session的生命周期

Session保存在服务器端,为了获得更高的存取速度,服务器一般把Session保存在内存里。需要注意的是只有访问jsp、Servlet等程序时才会创建Session,访问HTML、IMAGE等静态资源时并不会创建Session。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。

由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间没有活跃的用户的Session从内存里删除。这个时间就是Session的超时时间。如果超过了超时时间没访问服务器,Session就自动失效了。

Session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(long interval)修改。

Session的常用方法

URL地址重写

虽然Session保存在服务器里,对客户端是透明的,但是Session的正常运行也需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一用户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的ID(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办呢?比如很多手机就没有支持Cookie的功能。Java Web提供了一种解决方案:URL地址重写。

URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写。

转载于:https://www.cnblogs.com/BaiYiShaoNian/p/4591810.html

JavaWeb学习总结第六篇--认识Session机制相关推荐

  1. Egret入门学习日记 --- 第六篇

    第六篇 在本篇写之前,还是要为昨天写的日记道歉才行,差点就误人子弟了. 没想到在程序员界最低级的错误 "单词拼写错误" 还是会经常犯. childrenCreated 我就不能复制 ...

  2. Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】

    2019独角兽企业重金招聘Python工程师标准>>> 什么是Session Session 是另一种记录浏览器状态的机制.不同的是Cookie保存在浏览器中,Session保存在服 ...

  3. Spring Cloud学习系列第六篇【分布式配置中心】

    今天来学习如何使用Spring Cloud Config在微服务中搭建一个分布式配置中心,使用了分布式配置中心之后,我们就可以通过它来管理应用资源与业务资源配置内容.Spring Cloud Conf ...

  4. 【NiosII学习】第六篇、从零搭建属于自己的SOPC系统

    目录 第一部分.搭建自己的系统时的储备知识 1.单片机芯片的组成 2.系统的时钟 第二部分.新建工程 1.注意 2.新建工程 第三部分.搭建自己的软核 1.添加(晶振)锁相环IP核配置的详细步骤 2. ...

  5. MongoDB学习札记第六篇之主从复制

    mongo系列文章请看http://www.codefrom.com/p/mongodb 环境准备: ubuntu12.0.4 mongodb3.0.3 主从复制是MongoDB中最常见的复制方式.这 ...

  6. JavaWeb学习 (二十六)————监听器(Listener)学习(二)

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  7. docker学习总结第六篇:Kubernetes一键部署利器-kubeadm

    通过前面几篇文章的内容,我其实阐述了这样一个思想:要真正发挥容器技术的实力,你就不能仅仅局限于对 Linux 容器本身的钻研和使用. 这些知识更适合作为你的技术储备,以便在需要的时候可以帮你更快的定位 ...

  8. JavaWeb学习总结(六)—HttpServletResponse

    Response概述: response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse.在客户端发出每个请求时,服务 ...

  9. javaweb学习总结(十六)——JSP指令

    一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...

最新文章

  1. r读取shape文件可视化_【R】提取 PCA 结果并利用 ggplot2 进行可视化
  2. 宝塔更换域名_阿里云如何建站、域名、搭建网站?
  3. python基础之01数据类型-变量-运算浅解
  4. Apprentissage du français partie 2
  5. BestCoder Round #87 1003 LCIS[序列DP]
  6. 素数五个为一行的_对标交流 ▏潍坊市心理咨询师协会名誉理事长、潍坊医学院王力教授一行到昌邑市妇幼保健院指导交流工作...
  7. java设计模式学习 ----- 单例模式(Singleton)
  8. 使用Python扫描端口
  9. matlab padarray
  10. 你真的懂Linux吗?Linux运维从业方向与前景
  11. 龙卷风代码html,龙卷风旋涡.html
  12. 谷歌地图打不开怎么办?
  13. 解读京东“拉黑门”:被拐弯的真相
  14. python一切皆对象 对象都有类_Python小世界:彻底搞懂Python一切皆对象!!!
  15. 现货期货价格关系(现货期货价格关系分析)
  16. 主流的企业级虚拟化解决方案
  17. SIKI学院:MySQL数据库从零到精通:三:课时 4 : 03-服务器端运行通信原理图+课时 5 : 04-游戏服务器端简介
  18. 安装和配置魔灯(Moodle)
  19. Sunday 算法详解
  20. Java设计模式之中介者模式(UML类图分析+代码详解)

热门文章

  1. 内存管理模拟程序c语言,C语言 内存管理详解
  2. 全国计算机等级考试c语言程序设计真题,历年全国计算机等级考试二级C语言笔试选择真题...
  3. lob移表空间 oracle_移动一个带有lob字段的表到另外一个表空间
  4. 脑细胞膜等效神经网路简单分类实例
  5. pandas 将自己的文件写入csv
  6. jittor和pytorch生成网络对比之dragan
  7. import win32api 安装pip install pypiwin32
  8. 批处理命令学习笔记——Start命令
  9. MVC,MVP 和 MVVM 的图示
  10. 【HDOJ】2209 翻纸牌游戏