8366 发表于 2013-2-6 09:40:33

session会话跟踪的一个小例子

 
 
 内容包括:
 
 
  必备知识:
 
   会话跟踪实现主要有3种方式:
 
a. SSL 这种方式我们 先不研究
b. cookies
 
     会话跟踪 的实现 可以基于 会话cookie,这种cookie 是在浏览器内存中的 名字必须叫jsessionid, 如果浏览器禁用了cookie 那服务器端就不能跟踪会话了 ,就要采用url重写   
  
   如果客户端没禁止cookie ,也可以吧cookie 保存在客户端的硬盘上 ,这种cookie是持久cookie ,用户在每次访问一个url的时候 浏览器会吧这个url域下的cookie发到服务器上,服务器根据自己关心的cookie的名字来跟踪会话。迅雷看看记录播放历史就是这样干的
 
 
c. URL 重写
    就是在所有的页面跳转上加上 encodeURL() 或者 encodeRedirectURL(),之中方式是由于容器在处理动态页面或者action的时候会自动添加 ;jsessionid=?????? 的字符串 来标示会话,对于静态页面就无能为力了,不过我们可以吧静态页面改造成动态页面来解决 比如吧11.htm 改成tt.jsp
 
 
测试项目结构:
 
 http://dl.iteye.com/upload/picture/pic/56731/d3a2055d-cd3b-37c9-9e27-ba147a482a2b.jpg
 
例子1:使用会话cookie 和URL重写 追踪会话 需要的3个servlet
LoginServlet  使用会话cookie 会话跟踪的servlet
GreetServlet  使用会话cookie 登陆后打印会话信息
LogoutServlet  使会话失效
 
结论:如果客户端没禁止cookie 会话跟踪成功,如果客户端禁止了cookie.则每次都是新的会话,会话跟踪失败
 
iE 禁止cookie
 
http://dl.iteye.com/upload/picture/pic/56739/73c83926-b052-393d-908e-4b93f0d84746.jpg
 
访问 登陆servlet 看到IE 下面的提示: 红色的部分标示IE拒绝了回话cookie
 
http://dl.iteye.com/upload/picture/pic/56737/85dd1127-a7da-3c04-98d0-e00293bbfe73.jpg
 
 
对于这种方式我们就只好用URL重写了 ,重写以后再访问登陆页面 发现后面已经有了服务器生成的 jsessionid, 浏览器和服务器就可以使用这个标识来传递会话了
 
http://dl.iteye.com/upload/picture/pic/56735/fc0a0b11-bb39-3c36-822b-e97972c980df.jpg
 
例子2:使用持久cookie(保存在用户的硬盘上)追踪会话 需要的2个 servlet 
 
LoginServlet2
GreetServlet2 
 
 
 附件中试测试源码
 
 
 
页: [1]
查看完整版本: session会话跟踪的一个小例子