精华内容
下载资源
问答
  • 会话机制的一些解释session对象

    千次阅读 2017-02-21 12:57:24
    该ID又随请求再次发送到服务器,服务器根据此ID查询所有session对象,如果找到匹配的session对象,则可在这个session对象上取出属于该用户的状态信息,实现非连接下的状态维护。在很多服务器上,如果测试用户浏览器...

    1.会话机制

    用户在浏览器某个网站时,从进入网站到浏览器关闭或离开该网站所经过的这段时间,也就是在这个网站连续访问的期间,称为一个会话。当一个客户访问一个服务器时,可能会在这个网站的几个页面进行反复连接,反复刷新一个页面,由于HTTP协议是无状态协议,此次连接无法得到上次连接的状态,同一个用户的多次访问数据的维护无法由HTTP协议自身完成,而网站的应用程序应当通过某种方法来维护同一个客户访问的数据,这就是会话机制。不同客户、不同服务器以及在不同时间内的连续操作都是处在不同的会话中。
    正如一个电子商城的实现那样,java web应用通常使用javax.servlet.http.HttpSession类的子类的对象session来维护会话,不同的会话由不同session对象来维护,。session对象的标识(即session对象的ID)在用户第一次访问web应用时服务器自动产生并保持唯一性,对于网站用户来说,这个session的ID实际上是不用关心的,而网站的开发时,可以使用session的特定方法来获取对应的ID值。
    用session对象来保存每个用户的状态信息,以便在HTTP协议下也能跟踪每一个用户的操作状态,其中session对象本身保存在服务器上,而把session的ID随响应一起发送并保存在客户机的Cookie中,当客户再次访问同一web应用时,该ID又随请求再次发送到服务器,服务器根据此ID查询所有session对象,如果找到匹配的session对象,则可在这个session对象上取出属于该用户的状态信息,实现非连接下的状态维护。在很多服务器上,如果测试用户浏览器支持Cookie,就直接使用Cookies保存session对象的ID,如果不知此或者由于用户禁用了Cookie,就自动使用URL-rewriting(URL重写)技术保存session对象的ID。直到用户端用户关闭浏览器后,服务器端的session对象才会被注销,进而和用户的会话对应关系消失。当客户端重新打开浏览器再连接到该服务器时,服务器尤为该客户再创建一个新的session对象,实现一个新的会话维护。

    2.session对象的常用方法

    session对象为维护会话信息的每个流程提供了方便的存取信息方法,重用的方法如下:
    (1)public String getId():返回session创建时jsp引擎为它设的唯一ID,每个session的ID都不同。
    (2)public void setAttribute(String key,Object obj)将参数Object指定的对象obj添加到session对象中,并为添加的对象属性指定一个索引关键字。
    (3)public Object getAttribute(String key):获取session对象中含有关键字的属性对象。
    (4)public Boolean isNew():判断对象是否是一个新建的session对象。
    其他的一些方法:
    (1)long getCreationTime()取得session产生的时间,单位是毫秒。
    (2)long getLastAccessedTime():返回此session中客户端最近请求一次的时间。
    (3)int getMaxInactiveInterval():取得最大session失效的时间,若相邻两次请求超过这个时间,session将会失效,以负值标识session则永远不会超时。
    (4)void setMaxInactiveInterval():设定最大session失效的时间。
    (5)String[] getValueNames():返回一个包含此session所有可用属性名称的数组。
    (6)void invalidate():取消session对象,并将对象存放的内容删除。
    (7)void removeValue(String name):删除session对象中指定的属性。
    (8)Enumeration getAttributeNames():返回session对象存储的每一个属性对象,其结果为枚举类型
    (9)long getLastAccessedTime():返回和当前session对象相关的客户端最后发送请求的时间,最小的单位为毫秒。

    3.扩充实例

    新建sessionJsp.jsp页面,代码如下
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'sessionJSP.jsp' starting page</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">

      </head>
      
      <body>
    session的创建时间:<%=session.getCreationTime() %>&nbsp;&nbsp;
    <%=new Date(session.getCreationTime()) %><p>
    session 的id:<%=session.getId() %><p>
    客户端最后一次请求的时间:<%=session.getLastAccessedTime() %>&nbsp;&nbsp;
    <%=new java.sql.Time(session.getLastAccessedTime()) %>
    两次请求间隔多长时间此session被取消(ms):
    <%=session.getMaxInactiveInterval() %><p>
    是否是新创建的一个session:<%=session.isNew()?"yes":"no" %><p>
    <%
    for(int i = 0;i<session.getValueNames().length;i++){
    out.println(session.getValueNames()[i]+"="+session.getValue(session.getValueNames()[i]));
    }

    %>
    <!-- 返回的是从格林尼治时间(GMT)1970年1月1日0:00:00起计算当时的毫时数 -->
      </body>
    </html>


    第一次访问的结果图片:

    刷新后的结果图片:

    如果对该页面进行刷新操作,页面显示“是否新建一个新的session:no”,表示这次请求还是同一个session,不同于第一次访问时会产生新的session对象。


    展开全文
  • 在学习servlet时会发现,关闭浏览器,再打开新浏览器并发送请求,会生成了一个与关闭浏览器之前不同的新的session对象。所以初学者会有这样一种理解,就是浏览器关闭后服务端会清除session对象。但实际上是不是这样...
    在学习servlet时会发现,关闭浏览器,再打开新浏览器并发送请求,会生成了一个与关闭浏览器之前不同的新的session对象。所以初学者会有这样一种理解,就是浏览器关闭后服务端会清除session对象。但实际上是不是这样的呢? 

            Session是在客户端请求到达服务器时,服务器为此请求发出的客户所创建的一个对象,保存在服务器端。购物车是一个很好的例子,一个用户可以有很多session,但每个session只针对一个用户,这就保证了不同session之间的信息独立。 

            首先说明一点,在通常意义上,session所能发挥作用是基于cookie机制。针对所需要解释的问题,做这样一个假设:我们第一次访问一个网页。当客户端发送请求后,服务端会建立一个针对此请求发出客户的session对象,而且每个session都会有一个sessionID。服务端会自动将这个sessionID作为一个cookie附加到response上返回给客户端,这个cookie存放在浏览器内存中。我们每次对此网页发送的request都会附带着这个cookie,服务端收到这个请求后会都去cookie中取得这个sessionID,然后查询服务端是否存在一个对应此ID的session对象。如果有,可以直接使用此session;如果没有,则会新建一个。当浏览器关闭后,其所占的内存就会是放掉,cookie自然也就被清除了,此时我们不再保存有这个sessionID。所以再打开浏览器访问同一个页面时,由于没有sessionID,也就查不到对应的session对象,此时重新创建一个新的session对象。 

            那当我们关闭浏览器之后,服务器端原来的session对象是否还存在呢?答案是肯定的。服务端根本不知道我们是否关闭了浏览器,也不关心这个。客户端与服务端之间进行通信的唯一途径就是通过请求。服务器有自己的一套机制来管理session,比如多长时间会清除没有使用过的session对象,等等。 

            所以说,关闭浏览器session就被清除只是我们所看到的表面现象(实际上是新建了一个session对象),通常情况下,服务器并不会马上清除session对象,但这个根据服务端的设定而不同。 

            PS:cookie一般分为两种:一种是会话cookie,即服务端为session自动创建的cookie,这个cookie存放在浏览器进程中。另一种是可以存放在硬盘上的,可以通过服务端的某些设置,将一些信息放到cookie中并返回给客户端存放在硬盘上。 

           
    •         在以下情况中,session会结束生命周期,Servlet容器会将session所占用的资源释放掉: 
             
    • 客户端关闭浏览器(虽然不是这样,但还是这么说吧,解释参见上面)        
    • Session过期        
    • 服务器端调用了HttpSession的invalidate()方法   
    展开全文
  • Session对象取不到值的另一种解释

    千次阅读 2009-06-22 13:55:00
    在实际的开发过程中,经常需要用到Session、Cookies等对象,比如Forms身份和角色认证时需要...但最近在做一个防页面刷新的而次数增加的问题时却发现首次加载已给Session赋值再次刷新页面后Session对象值却为空,排除了S

    在实际的开发过程中,经常需要用到Session、Cookies等对象,比如Forms身份和角色认证时需要使用Cookies,跨平台跨域名单点登录时也需要用到Cookies,Session登录时需要用到Session,以及其他需要用到Cookies、Session的地方。但最近在做一个防页面刷新的而次数增加的问题时却发现首次加载已给Session赋值再次刷新页面后Session对象值却为空,排除了Session过期、对象清空等方面外,最后发现却是域名导致。即整个站点为达到几个二级域名相互登录,采用了域名+Cookies身份认证,结果在本地开发时由于不是当前域名所以Session对象永远是空,后去掉域名限制,问题得以解决了。希望该小细节对大家有所帮助。

    展开全文
  • 刚好学习到了ASP.NET的三个对象Application,Server,Session觉得比较有用,先作为笔记记录下,方便以后查用,顺便也可以加深印象。因为理解时因人而异,文章中对对象具体的解释清参考MSDN官方文档。  一、...

    这段时间利用工作之余想系统的再次去学习ASP.NET。刚好学习到了ASP.NET的三个对象Application,Server,Session觉得比较有用,先作为笔记记录下,方便以后查用,顺便也可以加深印象。因为理解时因人而异,文章中对对象具体的解释清参考MSDN官方文档。

         一、Application对象

              个人理解:应用程序及对象,当我们程序运行时Application就产生了。Application以键值对存储数据,可以将Application对象理解成对象的集合      

              所属的类:HttpApplicationState 启用

              MSDN官方:ASP.NET 应用程序中多个会话和请求之间的全局信息共享

              ASP.NET 应用程序是单个 Web 服务器上的某个虚拟目录及其子目录范围内的所有文件、页、处理程序、模块和代码的总和。

    HttpApplicationState 类的单个实例在客户端第一次从某个特定的 ASP.NET 应用程序虚拟目录中请求任何 URL 资源时创建。对于 Web 服务器上的每个 ASP.NET 应用程序都要创建一个单独的实例。然后通过内部 Application 对象公开对每个实例的引用。

    应用程序状态不在网络场(应用程序被多台服务器承载)或网络园(应用程序被同一台计算机上的多个进程承载)中共享。

             如何使用:如果要使用Application,先可以添加一个ASAX文件,它的作用是初始化应用程序级或会话级变量。VS2008中可以直接添加 ASAX文件,而在VS2003中在你新建ASP.NETweb 应用程序时时已经为你创建好了。在VS20003的Global.asax中是以类的形式存在,而在VS2008中的Global.asax是以脚本文件形式存在(个人理解)。新建好之后,我们会看到Global文件中有以下事件:

              1、void Application_Start(object sender, EventArgs e)
                   {
                              //在应用程序启动时运行的代码

                   }

              2、void Application_End(object sender, EventArgs e)
                   {
                             //在应用程序关闭时运行的代码

                   }

              3、void Application_Error(object sender, EventArgs e)
                   {
                             //在出现未处理的错误时运行的代码

                   }

              4、void Session_Start(object sender, EventArgs e)
                   {
                              //在新会话启动时运行的代码

                   }

             5、void Session_End(object sender, EventArgs e)
                   {
                             //在会话结束时运行的代码。
                            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
                            // InProc 时,才会引发 Session_End 事件。如果会话模式
                           //设置为 StateServer 或 SQLServer,则不会引发该事件。

                   }

         二、Session对象

               个人理解:存储用户信息。会话:客户端(浏览器)想服务器端发送请求,服务器端响应后返回给客户端,这样的一个过程可以理解为一个Session(会话)

               所属的类:HttpSessionState

               MSDN官方:提供对会话状态值以及会话级别设置和生存期管理方法的访问。详细请参考MSDN关于 ASP.NET 会话状态

               常用属性:SessionID(唯一用户会话标识符) TimeOut(用户超时) LCID(本地标识符) Count(会话状态中的项目数)

               常用事件:void Session_Start(object sender, EventArgs e)和void Session_End(object sender, EventArgs e)

        三、Server对象

              个人理解:获取你所请求服务器的相关信息

              所属类:HttpServerUtility

              MSDN官方:提供用于处理 Web 请求的 Helper 方法。

              常用属性:ScrtiptTimeOut MachineName

              常用方法:Execute Transfer HTMLEncode,URLEncode,MapPath

              Execute:在服务器端去执行另一个页面,执行完成后,将结果返回到当前页面

              Transfer:类似于Response.Redirect()

              HTMLEncode:以纯文本形式输出HTML标记

              URLEncode:处理在通过URL传递参数时包含的特殊字符

              &变量分隔符

     

    知识点:

        1、application对象是应用程序级的,是所有用户共享的,而session是用户级的,其他用户不能访问其他用户的session

        2、apolication和session都是键值对的集合对象

        3、会话断开或销毁超时时间一般为20分钟,可以在session_start事件中设置timeout的值,最小为1(1分钟)。还需要注意不是你把浏览器关闭就说明会话断开或销毁,而是你session的TimeOut超时或关闭World Wide Web Publishing服务,还可以是你机器正常关机。

     

    展开全文
  •  Session是在客户端请求到达服务器时,服务器为此请求发出的客户所创建的一个对象,保存在服务器端。购物车是一个很好的例子,一个用户可以有很多session,但每个session只针对一个用户,这就保证了不同session之间...
  • 1、Configuration对象: Configuration conf=new Configuration(); conf.configure(); 1.1 到 src下面找到名称hibernate.cfg.xml 配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件) 1.2 ...
  • ******************************************************************* SessionFactory接口负责Hibernate的初始化和建立Session对象。 它在Hibernate中起到一个缓冲区作用. Hibernate可以将自动生成的SQL语句、...
  • cookie与session解释

    2014-06-11 23:06:11
    一些基础的东西都快忘光了。...在创建Session对象的同时,服务器将会为该Session对象产生一个唯一编号,这个编号称之为SessionID,服务器以Cookie的方式将SessionID存放在客户端。当浏览器再次访问该服务器时,会将S
  • 首先我们需要创建一个Session对象.在不传参数的情况下,该Session的构造器将启动默认的图.之后我们可以通过Session对象的run(op)来执行我们想要的操作。tensorflow的内核使用更加高效的C++作为后台,以支撑它的密集...
  • 刚好学习到了ASP.NET的三个对象Application,Server,Session觉 得比较有用,先作为笔记记录下,方便以后查用,顺便也可以加深印象。因为理解时因人而异,文章中对对象具体的解释清参考MSDN官方文档。  一、...
  • 第一个问题:将对象保存到Session中 问题描述:如何将我需要的一些在数据库中的查询出来的名字或者是其他的信息保存到合适的实体当中。 问题的解决:既然涉及到保存的问题,首先就要了解JSP中的3种对象的不同在哪。 ...
  • 关于mybatis对session解释

    千次阅读 2018-09-04 11:23:47
    首先关于mybatis对session的处理。 有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。 无状态就是一次操作,不能...
  • V$session_longops解释

    2015-01-30 14:23:03
    通过V$session_longops视图中记录了长时间(运行时间超过6秒的)运行的事物,一般很多情况是全表扫描操作。 V$SESSION_LONGOPS列说明 SID:Session标识 SERIAL#:Session串号 OPNAME:操作简要说明 ...
  • 一:session的解释:  session即会话对象,它保存了本次客户端与服务端的通信...并生成一个唯一sessionId(JSessionId)返回给客户端的Cookie中,这个JsessionId对应于服务端创建的session对象,之后客户端每次向服务
  • 值得提醒的是Session的特定方法能使对象从一个状态转到另一种状态。好,我们分别对这四种状态进行简略的解释。 1:持久化状态:OID不为空,该对象Session缓存中,持久化对象和数据库中的相关记录想对应。注意:在...
  • ​http协议本身是一种无状态协议,及每一次浏览器对服务器的请求都是...​而为了提升用户体验感,就有session与cookie两种方式来实现状态保持,让服务器知道你上一次的请求是什么内容,比如判断用户是否登录过,浏览...
  • Hibernate的透明持久化用起来非常舒服,有时甚至忘记了数据库的存在。...而且关于实体对象的生命周期也有很多概念不清,分不清transient、persistent、detached的区别,只是知道PO、VO这样的通俗叫法。其实
  • 如题,java面试的问题,回答最好简单点,因为感觉面试时不会问到比较复杂一时半会解释不清楚的问题。谢谢大家
  • 《精通hibernate:java对象持久化技术详解》中提到session缓存的三种作用:减少DB的访问次数、保证同步、**当缓存中持久化对象存在循环关联关系时,保证不出现访问对象图的死循环,以及死循环引起的JVM堆栈溢出**。...
  • 在上一篇文章click here当中,我既写了基于cookie的session,也写到了请求上下文中的session,本篇博客主要解释一些容易混淆的概念,以及对两个session进行区分。 ❶基于cookie的session 这个session与框架...
  • Session简介

    2017-11-22 16:10:12
    声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;...这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 483
精华内容 193
关键字:

解释session对象