使用会话追踪sessiontracking.ppt

上传人:牧羊曲112 文档编号:6241649 上传时间:2023-10-09 格式:PPT 页数:24 大小:271KB
返回 下载 相关 举报
使用会话追踪sessiontracking.ppt_第1页
第1页 / 共24页
使用会话追踪sessiontracking.ppt_第2页
第2页 / 共24页
使用会话追踪sessiontracking.ppt_第3页
第3页 / 共24页
使用会话追踪sessiontracking.ppt_第4页
第4页 / 共24页
使用会话追踪sessiontracking.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《使用会话追踪sessiontracking.ppt》由会员分享,可在线阅读,更多相关《使用会话追踪sessiontracking.ppt(24页珍藏版)》请在三一办公上搜索。

1、第9章 使用会话追踪(session tracking),9.1 会话与会话追踪,Internet通信协议可以分为两大类:有连接协议和无连接协议,两者的最大差别在于客户端和服务器端之间维持联机上的不同。session的引入:鉴于http是无状态的协议,当完成客户端和服务器的传递信息后,就断开之间的联系,这样就造成了怎么样在几个页面之间传递信息的问题.我们Jsp程序中很多参数需要从数据库中读取,有的参数实际读取一次就可以,如果设计成每个用户每产生一个页面都要读取数据库,很显然,数据库的负载很大,同时也浪费时间,虽然可能有数据库连接池优化,但是尽量少使用数据库是我们编程的原则.Session,中文

2、经常翻译为“会话”。session tracking(会话追踪)是指一类用来客户端与服务器之间保持状态的解决方案,简单地说,当一个客户在多个页面间切换时,服务器会保存该用户的信息。,9.2 实现会话追踪的4种方式,(1)使用持续Cookies(Persistent Cookie)(2)使用包含额外参数的URL(URL Rewriting)。(3)建立含有数据的隐藏表单字段(Hidden Form Field)。(4)使用内建session 对象。相对于安全级别来说第四种最高了,session是指在一段时间内客户端和服务器之间的一连串的相关的交互过程。,下面这段代码先将会话信息记录在HashMa

3、p中,保存在服务器端,并用sessionID标识,然后把sessionID保存在名为“JSESSIONID”的Cookie中。用户请求到达服务器后,先从Cookie中取出sessionID,然后从HashMap中取出会话信息。这样就实现了会话追踪。虽然Cookie强大且持续性高,但是由于有些用户因为担心Cookie对个人隐私的威胁,会关闭Cookie,一旦如此,便无法利用Cookie来达到会话追踪的功能。,9.2.1 使用Cookie,Cookie是一个小小的文本文件,它是将会话信息记录在这个文本文件内,每个页面都去Cookie中提取以前的会话信息String sessionID=makeUn

4、iqueString();/是用来产生唯一的 session id HashMap sessionInfo=new HashMap();HashMap globaTable=findTableStoringSessions();globeTable.put(sessionID,sessionInfo);Cookie sessionCookie=new Cookie(JSESSION,sessionID);sessionCookie setPath(“/”);response.addCookie(sessionCookie);,9.2.2 URL重写,URL重写是利用GET的方法,在URL的尾部

5、添加一些额外的参数来达到会话追踪(session tracking)的目的,服务器将这个标识符与它所存储的有关会话的数据关联起来。URL看起来如下:http:/host/path/file.html;jsessionid=1234,使用URL重写的优点是Cookie被禁用或者根本不支持的情况下依旧能够工作。但也有很多缺点:必须对所有指向您的网站的URL进行编码。所有页面必须动态生成。不能使用预先记录下来的URL进行访问,或者从其他网站链接进行访问。,9.2.3 隐藏表单字段,隐藏表单字段的方法,是利用HTML内Hidden的属性,把客户端的信息,在用户不察觉的情形下,偷偷地随着请求一起传送给到

6、服务器处理,这样一来,就可以进行会话跟踪的任务了。可以下列的方法来做隐藏表单字段的会话追踪。,9.2.4 使用内建session对象,传统的会话追踪方式使用比较麻烦,JSP使用内建的session对象可以非常方便地实现会话追踪,JSP的会话机制基于Cookie或URL重写技术,融合了这两种技术的优点,当客户端允许使用Cookie时,内建session对象使用Cookie进行会话追踪,如果客户端禁用Cookie,则选择使用URL重写。,(1)获取session对象例如把购物车作为属性存储在session中,在其他JSP页面中可以通过session再获得购物车。/在JSP页面中可以直接使用sess

7、ionShoppingCart cart=(ShoppingCart)session.getAttribute(cart);内建的session对象是.HttpSession类的实例,如果在JavaBean或者Servlet中使用session就需要先从当前的request对象中取得,例如:/得到用户session和购物篮HttpSession session=request.getSession();ShoppingCart cart=(ShoppingCart)session.getAttribute(cart);,(2)读写session中的数据向session中存入对象使用setAtt

8、ribute方法,通过getAttribute方法读取对象。从session返回的值注意要转换成合适的类型,要注意检查结果是否为null。例如下面一段代码:HttpSession session=request.getSession();SomeClass value=(SomeClass)session.getAttribute(someID);if(value=null)value=new SomeClass(.);session.setAttribute(someID,value);doSomethingWith(value);,(3)废弃session数据调用removeAttribu

9、te废弃session中的值,即移除与名称关联的值。调用invalidate废弃整个session,即废弃当前的session。如果用户注销离开站点,注意废弃与用户相关联的所有session。(4)session的生命周期由于没有办法知道HTTP客户端是否不再需要session,因此每个session都关联一个时间期限使它的资源可以被回收。但是这一部分的具体内容将在9.3节中进行详细的介绍。,(5)服务器使用URL重写session默认使用Cookie技术进行会话追踪,如果客户端不接受Cookie的时候,服务器可以利用URL重写的方式将sessionID作为参数附在URL后面,此时须利用res

10、ponse对象内的encodeURL或encodeRedirectURL方法,这两个方法首先判断Cookies是否被浏览器支持;如果支持,则参数URL被原样返回,session ID将通过Cookies来维持。否则返回带有sessionID的URL。,下面是使用encodeURL方法的示例,两个文件hello1.jsp和hello2.jsp。hello1.jsp的完整程序代码如下:进入到hello2.jsp,hello1.jsp利用了response对象内的encodeURL方法,将URL做了一个编码动作。其实就是把进入到hello2.jsp改为:进入到hello2.jsp若要使用重定向,例如

11、:response.sendRedirect(hello2.jsp);也应该改为:response.encodeRedirectURL(hello2.jsp);,同时需要注意的是,将session的ID以URL的编码方式进行时,需将每一页都编码,才能保留住session的ID。如果遇到没有编码的URL,则无法进行会话跟踪。hello2.jsp的完整程序代码如下:,可以看到如果服务器使用URL重写,它将会话信息附加到URL上,如下所示:http:/localhost:8080/ch09/hello2.jsp;jsessionid=A09F3A5583825EE787580106CC62A1E8,

12、(6)内建session对象使用示例下面是一个记录同一用户到站次数的计数器,该实例包含一个文件sessionCounter.jsp。sessionCounter.jsp记录单一用户每次光临的次数。首先,从session内取出accessCount的值,如果值为null时,代表用户第一次光临,就将accessCount设为0,将heading设为“Welcome,Newcomer”,如果值不为null,则把accessCount的值加1,将heading设为“Welcome Back”。sessionCounter.jsp的初次执行结果如图9-3所示。图9-3 sessionCounter.js

13、p的初次执行效果sessionCounter.jsp的多次执行结果如图9-4所示。图9-4 sessionCounter.jsp的多次执行效果,9.3 内建session对象的生命周期,内建session对象和cookie一样拥有特定的生命周期。一般来说,内建session对象在一段时间没有作用就会自动失效,也就是服务器会自动控管session失效时间。除此之外,也可以显式地通过HttpSession类的setMaxInactiveInterval()方法为每个单独的session对象设置失效时间。如果不使用这个方法,默认的失效时间便由系统指定。另外也可以使用HttpSession类的inva

14、lidate()方法,session不论多久的时间为过期,将立即失效。,9.3.1 在web.xml中配置内建session对象的过期时间,但是 session-config和session-timeout元素可以显式用来在所有服务器上指定失效时间。时间单位是分钟,所以下面的示例设置了session对象默认的失效时间是3个小时(180分钟)。180session-config设置session失效时间的方法和使用HttpSession类中的setMaxInactiveInterval方法有两个细微的差别。首先,session-time子元素定义的时间值单位是分钟,然而setMaxInactiv

15、eInterval定义的值单位是秒。其次,如果session-timeout指定的值是0或负数,session将不会失效,但是setMaxInactiveInterval方法要达到同样的结果,只能设置负数。,设置内建session对象的过期时间,在服务器上,通过为站点上的用户创建 session对象保存该用户的信息。当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再

16、分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。一个session可以利用isNew方法来得知是否为一个新的session。由于没有办法知道HTTP客户端是否不再需要session,因此每个session都关联一个时间期限使它的资源可以被回收。,sessionLife.jsp实例介绍如何手动控制session的过期时间,以节省服务器资源。,9.4 使用HttpSessionBinndingListener接口监听session对

17、象的事件,在Servlet中,传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用HttpSession对象的setAttribute方法的时候)和移去的时候(即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候)Session对象会自动调用监听器的valueBound和valueUnbound方法(这是HttpSessionBindingListener接口中的方法)。,实例userList.java、userTrace.java和两个JSP文件Login.jsp、userList.jsp。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号