Session基础知识

主题

概念

Session的创建

Session的存储机制

Session的失效

参考资料

概念

Session代表一次用户会话。一次用户会话的含义是:从客户端浏览器连接服务器开始,到客户端浏览器与服务端断开为止,这个过程就是一次会话。

Session机制采用的是在服务端保存状态的方法。

Session的创建

当客户端向服务器发送一个请求时,服务器首先检查请求里是否包含SessionID,如果包含了SessionID则说明该客户端已经登录过并且服务端为此客户端创建了一个Session,服务器就依照SessionID将这个Session在服务器中找出来(如果找不到,就有可能为他新创建一个)。如果客户端请求里不包含SessionID,则为该客户新创建一个Session并生成一个与此Session相关的SessionID。这个SessionID是不重复的,唯一的,不容易找到规律的字符串。这个SessionID将在本次响应中返回到客户端保存。

Session是在服务端调用HttpServletRequest.getSession(true);这样的语句时才被创建,如果JSP没有显式的使用<%@page Session=”false”%> 关闭Session,则JSP文件在编译成Servlet时将会自动加上HttpServletRequest.getSession(true);这就是JSP内置对象session的由来。

Session的存储机制

一般情况下,Session都是存储在内存中,当服务器进程被停止或者重启的时候,内存里的Session也会被清空。如果设置了Session的持久化特性,服务器就会把Session保存到硬盘上,当服务器进程重新启动后Session里的信息能够被再次使用。

Session的存储方式及各存储方式下Session属性值是否需要可序列化:

InProc(默认) :不需要序列化,存放在IIS进程中(内存),重启IIS服务器时会话状态消失。

SQLServer:需要序列化,存放在数据库中,存储在硬盘中。

StateServer:需要序列化, 存放在Asp.Net状态服务进程中,重启Web应用时保留会话状态。

Session的失效

Session在下列情况下失效:

程序调用HttpSession.invalidate();

距离上一次收到客户端发送的SesionID时间间隔超过了Session的超时设置,tomcat默认session超时时间为30分钟;

服务器进程被停止(非持久Session);

我们常说打开浏览器就创建了一个Session,关闭浏览器时Session也被删除,事实上,除非程序通知服务器删除Session,否则Session会被服务器一直保留,直到Session的失效时间到了自动删除。服务器不知道浏览器被关闭,浏览器不会主动地在其关闭之前通知服务器它将要关闭。程序一般是在用户注销后删除Session。我们产生这种错觉地原因是:一般Session机制都使用cookie来保存SessionID,而一旦关闭浏览器,SessionID就不存在了,再连接服务器时找不到原来的Session了。如果cookie保存在硬盘中,或者用某种手段改写浏览器发出的 HTTP请求头,把原来的SessionID发送给服务器,则再次打开浏览器仍然能够找到原来的Session。

恰恰由于关闭浏览器时不会让Session被删除,迫使服务器为Session设置了一个失效时间。当距离客户端上一次使用Session的时间超过失效时间,服务器就认为客户端已经停止了活动,才会把Session删除以节省存储空间。

参考资料

http://www.cnblogs.com/literoad/archive/2012/05/13/2498528.html

转载于:https://www.cnblogs.com/luoyun/p/3606058.html

Session基础知识相关推荐

  1. C# 系统应用之Cookie\Session基础知识及php读取Cookie\Session

    本文主要是毕业设计"个人电脑使用记录清除软件"系列系统应用文章中关于Cookie方面的知识,主要从介绍Cookie的基础知识和PHP关于Cookie\Session两个会话管理机制 ...

  2. Cookie,Session基础知识

    //这部分主要是CookieSession的笔记部分/** //获取来访的客户端类型String clientTye=req.getHeader("User-Agent");//如 ...

  3. ajax获取session值_cookie和session基础知识学习

    一.session的简单使用 session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象. session的使用步骤: 获取session对象 使用sessi ...

  4. http session 基础知识

    因为Http的无接连,无状态,所以造就了Cookie,Session的诞生. Session也是类似Cookie一样的功能,用于记录客户端浏览器与服务器端交互的会话状态.它与Cookie的重要区别是: ...

  5. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...

  6. java培训基础知识都学哪些

    很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...

  7. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  8. SP 短信开发-基础知识篇

    SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...

  9. python基础知识整理-python爬虫基础知识点整理

    首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫 ...

最新文章

  1. Python 3.6 安装 Shapely
  2. 三维点云数据处理软件供技术原理说明_海量点云数据处理理论与技术
  3. 一维有限元法matlab,一维有限元法解常微分方程
  4. vs不一致的行尾对话框怎么调出_SolidWorks工程图打开后图纸没有了空白了怎么办?还能找回来吗?...
  5. zlib1.2.5的编译
  6. 【作品】超级玛丽射击版
  7. 使用dbutils对mysql数据库做增删改查的基本操作方法
  8. 华为云MVP程云:知识化转型,最终要赋能一线
  9. 神奇!只用标签名称就可以做文本分类
  10. Linux3.4内核的基本配置和编译
  11. vmware虚拟机WinXp sp3的系统cpu占用100%的解决方案
  12. 禁锢女性科技界地位?《花花公子》的裸体照片一直是测试科技的试金石
  13. 解决qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was found.问题
  14. c#操作word文档(转自小排_流浪狗)
  15. c#超火表白小程序(含代码教程)
  16. 【报错】unknown error: DevToolsActivePort file doesn‘t exis
  17. 小甲鱼Python第二十三讲、第二十四讲(递归-这帮小兔崽子、汉诺塔)
  18. 单通道降噪—维纳滤波
  19. 时事热点型软文怎么写?
  20. RedHat Linux口令恢复任我行(转)

热门文章

  1. suse 调整分区_安装suse linux如何手工分配各个分区大小?
  2. jsf 自定义属性_JSF资源包,自定义消息示例教程
  3. android自定义对话框_Android自定义提醒对话框
  4. 小程序nginx做反向代理_NGINX作为节点或Angular应用程序的反向代理
  5. 在Scala中评估val,var,lazy val和def构造时
  6. java序列化与深度克隆
  7. C++是C语言演变过来的,为何不能代替C语言?
  8. [总]Android高级进阶之路
  9. 大数据的普及催生医疗信息技术市场蓝海
  10. Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上