为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 使用会话追踪sessiontracking

使用会话追踪sessiontracking

2021-06-02 25页 ppt 277KB 1阅读

用户头像 机构认证

夕夕资料

拥有专业强大的教研实力和完善的师资团队,专注为用户提供合同简历、论文写作、PPT设计、计划书、策划案、各类模板等,同时素材和资料部分来自网络,仅供参考.

举报
使用会话追踪sessiontracking第9章使用会话追踪(sessiontracking)9.1会话与会话追踪Internet通信协议可以分为两大类:有连接协议和无连接协议,两者的最大差别在于客户端和服务器端之间维持联机上的不同。session的引入:鉴于http是无状态的协议,当完成客户端和服务器的传递信息后,就断开之间的联系,这样就造成了怎么样在几个页面之间传递信息的问题.我们Jsp程序中很多参数需要从数据库中读取,有的参数实际读取一次就可以,如果设计成每个用户每产生一个页面都要读取数据库,很显然,数据库的负载很大,同时也浪费时间,虽然可能有数据库连接池优化,...
使用会话追踪sessiontracking
第9章使用会话追踪(sessiontracking)9.1会话与会话追踪Internet通信可以分为两大类:有连接协议和无连接协议,两者的最大差别在于客户端和服务器端之间维持联机上的不同。session的引入:鉴于http是无状态的协议,当完成客户端和服务器的传递信息后,就断开之间的联系,这样就造成了怎么样在几个页面之间传递信息的问.我们Jsp程序中很多参数需要从数据库中读取,有的参数实际读取一次就可以,如果设计成每个用户每产生一个页面都要读取数据库,很显然,数据库的负载很大,同时也浪费时间,虽然可能有数据库连接池优化,但是尽量少使用数据库是我们编程的原则.Session,中文经常翻译为“会话”。sessiontracking(会话追踪)是指一类用来客户端与服务器之间保持状态的解决,简单地说,当一个客户在多个页面间切换时,服务器会保存该用户的信息。9.2实现会话追踪的4种方式(1)使用持续Cookies(PersistentCookie)(2)使用包含额外参数的URL(URLRewriting)。(3)建立含有数据的隐藏单字段(HiddenFormField)。(4)使用内建session对象。相对于安全级别来说第四种最高了,session是指在一段时间内客户端和服务器之间的一连串的相关的交互过程。下面这段代码先将会话信息在HashMap中,保存在服务器端,并用sessionID标识,然后把sessionID保存在名为“JSESSIONID”的Cookie中。用户请求到达服务器后,先从Cookie中取出sessionID,然后从HashMap中取出会话信息。这样就实现了会话追踪。虽然Cookie强大且持续性高,但是由于有些用户因为担心Cookie对个人隐私的威胁,会关闭Cookie,一旦如此,便无法利用Cookie来达到会话追踪的功能。9.2.1使用CookieCookie是一个小小的文本文件,它是将会话信息记录在这个文本文件内,每个页面都去Cookie中提取以前的会话信息StringsessionID=makeUniqueString();//是用来产生唯一的session idHashMapsessionInfo=newHashMap();HashMapglobaTable=findTableStoringSessions();globeTable.put(sessionID,sessionInfo);CookiesessionCookie=newCookie("JSESSION",sessionID);sessionCookiesetPath(“/”);response.addCookie(sessionCookie);9.2.2URL重写URL重写是利用GET的方法,在URL的尾部添加一些额外的参数来达到会话追踪(sessiontracking)的目的,服务器将这个标识符与它所存储的有关会话的数据关联起来。URL看起来如下:http://host/path/file.html;jsessionid=1234,使用URL重写的优点是Cookie被禁用或者根本不支持的情况下依旧能够工作。但也有很多缺点:必须对所有指向您的网站的URL进行编码。所有页面必须动态生成。不能使用预先记录下来的URL进行访问,或者从其他网站链接进行访问。9.2.3隐藏表单字段隐藏表单字段的方法,是利用HTML内Hidden的属性,把客户端的信息,在用户不察觉的情形下,偷偷地随着请求一起传送给到服务器处理,这样一来,就可以进行会话跟踪的任务了。可以下列的方法来做隐藏表单字段的会话追踪。9.2.4使用内建session对象传统的会话追踪方式使用比较麻烦,JSP使用内建的session对象可以非常方便地实现会话追踪,JSP的会话机制基于Cookie或URL重写技术,融合了这两种技术的优点,当客户端允许使用Cookie时,内建session对象使用Cookie进行会话追踪,如果客户端禁用Cookie,则选择使用URL重写。(1)获取session对象例如把购物车作为属性存储在session中,在其他JSP页面中可以通过session再获得购物车。//在JSP页面中可以直接使用sessionShoppingCartcart=(ShoppingCart)session.getAttribute("cart");内建的session对象是javax.servlet.http.HttpSession类的实例,如果在JavaBean或者Servlet中使用session就需要先从当前的request对象中取得,例如://得到用户session和购物篮HttpSessionsession=request.getSession();ShoppingCartcart=(ShoppingCart)session.getAttribute("cart");(2)读写session中的数据向session中存入对象使用setAttribute方法,通过getAttribute方法读取对象。从session返回的值注意要转换成合适的类型,要注意检查结果是否为null。例如下面一段代码:HttpSessionsession=request.getSession();SomeClassvalue=(SomeClass)session.getAttribute("someID");if(value==null){value=newSomeClass(...);session.setAttribute("someID",value);}doSomethingWith(value);(3)废弃session数据调用removeAttribute废弃session中的值,即移除与名称关联的值。调用invalidate废弃整个session,即废弃当前的session。如果用户注销离开站点,注意废弃与用户相关联的所有session。(4)session的生命周期由于没有办法知道HTTP客户端是否不再需要session,因此每个session都关联一个时间期限使它的资源可以被回收。但是这一部分的具体内容将在9.3节中进行详细的介绍。(5)服务器使用URL重写session默认使用Cookie技术进行会话追踪,如果客户端不接受Cookie的时候,服务器可以利用URL重写的方式将sessionID作为参数附在URL后面,此时须利用response对象内的encodeURL或encodeRedirectURL方法,这两个方法首先判断Cookies是否被浏览器支持;如果支持,则参数URL被原样返回,sessionID将通过Cookies来维持。否则返回带有sessionID的URL。下面是使用encodeURL方法的示例,两个文件hello1.jsp和hello2.jsp。hello1.jsp的完整程序代码如下:<%@pagecontentType="text/html;charset=gb2312"%><%Stringurl=response.encodeURL("hello2.jsp");%>'>进入到hello2.jsphello1.jsp利用了response对象内的encodeURL方法,将URL做了一个编码动作。其实就是把进入到hello2.jsp改为:'>进入到hello2.jsp若要使用重定向,例如:response.sendRedirect("hello2.jsp");也应该改为:response.encodeRedirectURL("hello2.jsp");同时需要注意的是,将session的ID以URL的编码方式进行时,需将每一页都编码,才能保留住session的ID。如果遇到没有编码的URL,则无法进行会话跟踪。hello2.jsp的完整程序代码如下:<%@pagecontentType="text/html;charset=gb2312"%><%out.println("sessionIDis"+session.getId());%>可以看到如果服务器使用URL重写,它将会话信息附加到URL上,如下所示:http://localhost:8080/ch09/hello2.jsp;jsessionid=A09F3A5583825EE787580106CC62A1E8(6)内建session对象使用示例下面是一个记录同一用户到站次数的计数器,该实例包含一个文件sessionCounter.jsp。sessionCounter.jsp记录单一用户每次光临的次数。首先,从session内取出accessCount的值,如果值为null时,代表用户第一次光临,就将accessCount设为0,将heading设为“Welcome,Newcomer”,如果值不为null,则把accessCount的值加1,将heading设为“WelcomeBack”。sessionCounter.jsp的初次执行结果如图9-3所示。图9-3sessionCounter.jsp的初次执行效果sessionCounter.jsp的多次执行结果如图9-4所示。图9-4sessionCounter.jsp的多次执行效果9.3内建session对象的生命周期内建session对象和cookie一样拥有特定的生命周期。一般来说,内建session对象在一段时间没有作用就会自动失效,也就是服务器会自动控管session失效时间。除此之外,也可以显式地通过HttpSession类的setMaxInactiveInterval()方法为每个单独的session对象设置失效时间。如果不使用这个方法,默认的失效时间便由系统指定。另外也可以使用HttpSession类的invalidate()方法,session不论多久的时间为过期,将立即失效。9.3.1在web.xml中配置内建session对象的过期时间但是session-config和session-timeout元素可以显式用来在所有服务器上指定失效时间。时间单位是分钟,所以下面的示例设置了session对象默认的失效时间是3个小时(180分钟)。 180session-config设置session失效时间的方法和使用HttpSession类中的setMaxInactiveInterval方法有两个细微的差别。首先,session-time子元素定义的时间值单位是分钟,然而setMaxInactiveInterval定义的值单位是秒。其次,如果session-timeout指定的值是0或负数,session将不会失效,但是setMaxInactiveInterval方法要达到同样的结果,只能设置负数。9.3.2设置内建session对象的过期时间在服务器上,通过为站点上的用户创建session对象保存该用户的信息。当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。一个session可以利用isNew方法来得知是否为一个新的session。由于没有办法知道HTTP客户端是否不再需要session,因此每个session都关联一个时间期限使它的资源可以被回收。sessionLife.jsp实例介绍如何手动控制session的过期时间,以节省服务器资源。9.4使用HttpSessionBinndingListener接口监听session对象的事件在Servlet中,传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用HttpSession对象的setAttribute方法的时候)和移去的时候(即调用HttpSession对象的removeAttribute方法的时候或SessionTimeout的时候)Session对象会自动调用监听器的valueBound和valueUnbound方法(这是HttpSessionBindingListener接口中的方法)。实例userList.java、userTrace.java和两个JSP文件Login.jsp、userList.jsp。用于科普,若有不当之处,请指正,感谢您的下载。
/
本文档为【使用会话追踪sessiontracking】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索