`
gcq04552015
  • 浏览: 457312 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Session 工作原理

 
阅读更多
在java WEB开发中,session既是重点又是难点,很多初学者都没有建立一个清晰的概念,希望通过下面这个示例对大家有所帮助。

在一个JavaWeb应用程序中新建2个jsp页面,名称分别为first.jsp和second.jsp。都是如下代码:
<%@ page language="java" pageEncoding="gb2312"%>
<html>
  <head> 
    <title>First.jsp page</title>
  </head>
  <body>
  <%
    out.println(session.getId()+”<br>”);
    out.println(session.isNew());
  %>
  </body>
</html>
然后我们启动服务器在同一个浏览器页面中先访问first.jsp然后再访问second.jsp,结果如下:
first.jsp
60FF62D46CCB9088DA4BA6125E612ED4
true
second.jsp
60FF62D46CCB9088DA4BA6125E612ED4
false
可以看到Id号码是一样的,当我们第一次访问一个Jsp页面时session对象就会创建,而以后的其他页面都是引用相同的session对象。
打开两个浏览器页面,分别访问first.jsp和second.jsp我们可以看到这时两个页面中的id号是不一样的,而且都是true,我们可以很容易得出结论,在相同的浏览器页面中是共享同一个session对象的。在大多数书籍中都是这样介绍session作用域的。但是情况并非全部如此,多个浏览器页面其实是完全可以共享相同的session对象的。下面我们慢慢解开谜底。
当我们打开浏览器页面第一次访问first.jsp 页面时,容器会生成一个session对象(设置了<%@ page session=false %>指令除外),并将这个session对象的Id号码通过cookie的形式传送到客户端(但是这个cookie不会写入到客户端硬盘上,通常是存在浏览器的缓存当中,当这个页面关闭后它就随之消失,在IE中这个cookie的设置叫做会话cookie,可以尝试一下将这个会话cookie禁用掉,结果会如何),这个cookie的名称一般称为jsessionid,值当然是sesion的id号码。当客户通过此浏览器页面再次访问该web应该程序的其他页面时,就会将这个cookie传送给容器,容器就会通过这个jsessionid号码找到已经生成session对象.如果当发送的请求没有与之相关联的jsessionid时,容器才会生成一个新的session对象。如果客户端禁用掉了会话cookie那么容器就不会根据请求找到任何已经建立的session对象,所以每次都会生成新的session对象,这样会对容器的性能大打折扣,所以在这种情况下可以设置session指令,告诉容器不必为每一个页面都生成一个新的session对象。但是这种方式有一定的局限性,除非每个页面都不使用session对象,但是session的功能早已经深入人心,这种情况我们可以使用重写URL的方式,手工的给其他的页面传递jsessionid号码,这样容器就能够通过传递的id号码找到以前的 session对象,而不会再生成新的session对象了。这种方式完全可以打破同一个浏览器页面共享一个session对象的说法,多个浏览器页面也完全可以。
注意:如果大家想彻底的搞懂session的工作机制,其实先要清楚cookie的工作机制,因为一般情况下容器都会用到cookie来寻找jesessionid的。
分享到:
评论

相关推荐

    Session工作原理.pdf

    Session工作原理.pdf

    Session的工作原理与概念详解

    主要讲的是session的工作原理与概念详解

    servlet之session工作原理简介_动力节点Java学院整理

    主要介绍了servlet之session工作原理简介,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    session原理

    session原理 session原理 session原理 session原理 session原理

    深入解析Session工作原理及运行流程

    主要介绍了深入解析Session工作原理及运行流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    带你了解session和cookie作用原理区别和用法

    主要介绍了session和cookie作用原理,区别和用法,以及使用过程中的优缺点,通过列举区别和原理,使读者更能理解两者之间的关系,需要的朋友可以参考下

    PHP的session基础

    关于PHP的session的基本使用 认识session的工作原理 1启动session 2读写session的变量 3删除session变量 4session在用户登录中的应用

    Tomcat7基于Redis的Session共享

    原理就是继承tomcat的manager接口,接管session的持久化工作 2.使用 ◦使用的时候就是Maven打包,放到tomcat的lib里面 (主要是三个包:commons-pool2-2.3.jar;jedis-2.7.3.jar;tomcat7-redis-cluster-1.0.0.jar) ...

    Tomcat8基于Redis的Session共享

    原理就是继承tomcat的manager接口,接管session的持久化工作 2.使用 ◦使用的时候就是Maven打包,放到tomcat的lib里面 (主要是三个包:commons-pool2-2.3.jar;jedis-2.7.3.jar;tomcat7-redis-cluster-1.0.0.jar) ...

    HTML5 Web缓存和运用程序缓存(cookie,session)

    session工作原理:为每个用户创建一个session id(核心!!!)。而session id是存储在cookie中的,也就是说如果浏览器禁用了cookie,那么session会失效!(但是可以通过其它方式实现,如:通过URL传递

    session机制,缓存,安全

    该资源的主要讲解了session的主要用法,工作原理,安全机制,单点登录,在大型web中的应用。主要为对session不甚了解的同志,价值含量较高,也较为实用。

    Session的工作方式

    Session的工作原理也是这样。 首先,PHP为建立Session的用户产生一个独一无二的字符串,用来标志这个用户的session。一般将这个字符串称作Session Id。然后“sess”+Session Id为文件名(例如一个Session ID为111...

    yxdYXD11123123#Frontend-Road#session原理+express-session用法1

    工作流程当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对,然后将 key(cookie

    session详解

    session的工作原理,希望需要帮助的朋友不要错过

    彻底理解cookie,session,token的使用及原理

    主要介绍了彻底理解cookie,session,token的使用及原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    PHP session有效期session.gc_maxlifetime

    一个已知管用的方法是,使用session_set_save_...那么怎么样可以实现Session的永久生命期呢? 大家知道,Session储存在服务器端,根据客户端提供的SessionID来得到这个用户的文件,然后读取文件,取得变量的值,Ses

    25Session及第三方Cookie的工作原理.mp4

    Web协议详解与抓包实战

    java面试题大全--java基础,struts,spring,ejb等

    4.描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。 5.列出Jsp中包含外部文件的方式,两者有何区别。 6.说明Jsp中errorPage的作用,应用范围。 7.介绍在Jsp中如何使用JavaBeans。 8.简单介绍JSP...

    Session 失效的原因汇总及解决丢失办法

    顺便提一下asp中Session的工作原理: asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS...

    Zend Framework实现多服务器共享SESSION数据的方法

    在解决问题之前,先来了解一下 PHP SESSION 的工作原理。在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() 打开 SESSION,这样就会产生客户端的唯一标识 SESSION ID(此 ID 可通过函数 ...

Global site tag (gtag.js) - Google Analytics