Session基础知识
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基础知识相关推荐
- C# 系统应用之Cookie\Session基础知识及php读取Cookie\Session
本文主要是毕业设计"个人电脑使用记录清除软件"系列系统应用文章中关于Cookie方面的知识,主要从介绍Cookie的基础知识和PHP关于Cookie\Session两个会话管理机制 ...
- Cookie,Session基础知识
//这部分主要是CookieSession的笔记部分/** //获取来访的客户端类型String clientTye=req.getHeader("User-Agent");//如 ...
- ajax获取session值_cookie和session基础知识学习
一.session的简单使用 session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象. session的使用步骤: 获取session对象 使用sessi ...
- http session 基础知识
因为Http的无接连,无状态,所以造就了Cookie,Session的诞生. Session也是类似Cookie一样的功能,用于记录客户端浏览器与服务器端交互的会话状态.它与Cookie的重要区别是: ...
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...
- java培训基础知识都学哪些
很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...
- 超详细的Java面试题总结(四 )之JavaWeb基础知识总结
系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...
- SP 短信开发-基础知识篇
SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...
- python基础知识整理-python爬虫基础知识点整理
首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫 ...
最新文章
- Python 3.6 安装 Shapely
- 三维点云数据处理软件供技术原理说明_海量点云数据处理理论与技术
- 一维有限元法matlab,一维有限元法解常微分方程
- vs不一致的行尾对话框怎么调出_SolidWorks工程图打开后图纸没有了空白了怎么办?还能找回来吗?...
- zlib1.2.5的编译
- 【作品】超级玛丽射击版
- 使用dbutils对mysql数据库做增删改查的基本操作方法
- 华为云MVP程云:知识化转型,最终要赋能一线
- 神奇!只用标签名称就可以做文本分类
- Linux3.4内核的基本配置和编译
- vmware虚拟机WinXp sp3的系统cpu占用100%的解决方案
- 禁锢女性科技界地位?《花花公子》的裸体照片一直是测试科技的试金石
- 解决qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was found.问题
- c#操作word文档(转自小排_流浪狗)
- c#超火表白小程序(含代码教程)
- 【报错】unknown error: DevToolsActivePort file doesn‘t exis
- 小甲鱼Python第二十三讲、第二十四讲(递归-这帮小兔崽子、汉诺塔)
- 单通道降噪—维纳滤波
- 时事热点型软文怎么写?
- RedHat Linux口令恢复任我行(转)
热门文章
- suse 调整分区_安装suse linux如何手工分配各个分区大小?
- jsf 自定义属性_JSF资源包,自定义消息示例教程
- android自定义对话框_Android自定义提醒对话框
- 小程序nginx做反向代理_NGINX作为节点或Angular应用程序的反向代理
- 在Scala中评估val,var,lazy val和def构造时
- java序列化与深度克隆
- C++是C语言演变过来的,为何不能代替C语言?
- [总]Android高级进阶之路
- 大数据的普及催生医疗信息技术市场蓝海
- Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上