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

     

      

最新文章

  1. js中自定义构造函数讲解
  2. [转] 深入探讨C++中的引用
  3. 1.C#中几个简单的内置Attribute
  4. cocos2d-js屏幕任何位置点击开始的实现
  5. Winfrom treeview 如何从多个数据表中获取数据动态生成
  6. (step6.3.2)hdu 1068(Girls and Boys——二分图的最大独立集)
  7. 关联A850刷机包 高级电源 时间中心 优化 ROOT 动力 美化 简化
  8. Java 并发编程:Callable和Future
  9. 复选框checkbox——用背景图片替换样式
  10. Metasploit中aggregator插件无法使用
  11. web测试点总结---UI、兼容、功能、交互、安全、性能、接口测试
  12. 二叉搜索树BST
  13. 将目录下面所有的 .cs 文件合并到一个 code.cs 文件中,写著作权复制代码时的必备良药
  14. MVC ---- 无法将类型&quot;System.Data.EntityState&quot;隐式转换为&quot;System.Data.Entity.EntityState&quot;
  15. CSS深入理解之absolute(HTML/CSS)
  16. 浅学JavaScript
  17. Linux wget auto login and backup database
  18. OpenCV---开闭操作
  19. XSS的原理分析与解剖:第三章(技巧篇)【转】
  20. C++字符串拼接和输入

热门文章

  1. ASP.NET中session和ViewState区别
  2. 虚拟机下安装CentOS无法上网的解决方式
  3. CStdioFile类学习笔记&lt;转&gt;
  4. mongoDB _id:ObjectId(&quot;xxxx&quot;)详解
  5. asp.net web系统开发浏览器和前端工具
  6. node.js 学习03
  7. Windows RabbitMQ 添加用户、设置角色和权限 (包含无法添加的错误处理)
  8. ubuntu 12.04上安装sougou输入法
  9. altera tcl
  10. java-SimpleDateFormatDemo &amp; BirthDemo