web测试中Session实现原理_第1页
web测试中Session实现原理_第2页
web测试中Session实现原理_第3页
web测试中Session实现原理_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页web测试中Session实现原理web测试中Session实现原理

发表于:2023-05-09来源::点击数:标签:webWebWEBsessionSession

HTTP协议(/Protocols/)是“一次性单向”协议。服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTPRequest,服务端处理请求,并且返回一个HTTPResponse给客户端,本次HTTPRequest-ResponseCyc

HTTP协议(/Protocols/)是“一次性单向”协议。服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTPRequest,服务端处理请求,并且返回一个HTTPResponse给客户端,本次HTTPRequest-ResponseCycle结束。我们看到,HTTP协议本身并不能支持服务端保存客户端的状态信息。于是,WebServer中引入了session的概念,用来保存客户端的状态信息。这里用一个形象的比喻来解释session的工作方式。假设WebServer是一个商场的存包处,HTTPRequest是一个顾客,第一次来到存包处,管理员把顾客的物品存放在某一个柜子里面(这个柜子就相当于Session),然后把一个号码牌交给这个顾客,作为取包凭证(这个号码牌就是SessionID)。顾客(HTTPRequest)下一次来的时候,就要把号码牌(SessionID)交给存包处(WebServer)的管理员。管理员根据号码牌(SessionID)找到相应的柜子(Session),根据顾客(HTTPRequest)的请求,WebServer可以取出、更换、添加柜子(Session)中的物品,WebServer也可以让顾客(HTTPRequest)的号码牌和号码牌对应的柜子(Session)失效。顾客(HTTPRequest)的忘性很大,管理员在顾客回去的时候(HTTPResponse)都要重新提醒顾客记住自己的号码牌(SessionID)。这样,顾客(HTTPRequest)下次来的时候,就又带着号码牌回来了。我们可以看到,SessionID实际上是在客户端和服务端之间通过HTTPRequest和HTTPResponse传来传去的。我们看到,号码牌(SessionID)必须包含在HTTPRequest里面。关于HTTPRequest的具体格式,请参见HTTP协议(/Protocols/)。这里只做一个简单的介绍。在JavaWebServer(即Servlet/JSPServer)中,SessionID用jsessionid表示(请参见Servlet规范)。HTTPRequest一般由3部分组成:(1)RequestLine这一行由HTTPMethod(如GET或POST)、URL、和HTTP版本号组成。例如,GET/pub/WWW/TheProject.htmlHTTP/1.1GET/search?q=TomcatHTTP/1.1POST/searchHTTP/1.1GET/menu.do;jsessionid=1001HTTP/1.1(2)RequestHeaders这部分定义了一些重要的头部信息,如,浏览器的种类,语言,类型。RequestHeaders中还可以包括Cookie的定义。例如:User-Agent:Mozilla/4.0(compatible;MSIE5.5;WindowsNT5.0)Aclearcase/"target="_blank">ccept-Language:en-usCookie:jsessionid=1001(3)MessageBody如果HTTPMethod是GET,那么MessageBody为空。如果HTTPMethod是POST,说明这个HTTPRequest是submit一个HTMLForm的结果,那么MessageBody为HTMLForm里面定义的Input属性。例如,user=guestpassword=guestjsessionid=1001主意,如果把HTMLForm元素的Method属性改为GET。那么,MessageBody为空,所有的Input属性都会加在URL的后面。你在浏览器的URL地址栏中会看到这些属性,类似于http://www.somesite/login.do?use...amp;jsessionid=1001从理论上来说,这3个部分(RequestURL,CookieHeader,MessageBody)都可以用来存放SessionID。由于MessageBody方法必须需要一个包含SessionID的HTMLForm,所以这种方法不通用。一般用来实现Session的方法有两种:(1)URL重写。WebServer在返回Response的时候,检查页面中所有的URL,包括所有的连接,和HTMLForm的Action属性,在这些URL后面加上“;jsessionid=XXX”。下一次,用户访问这个页面中的URL。jsessionid就会传回到WebServer。(2)Cookie。如果客户端支持Cookie,WebServer在返回Response的时候,在Response的Header部分,加入一个“set-cookie:jsessionid=XXXX”header属性,把jsessionid放在Cookie里传到客户端。客户端会把Cookie存放在本地文件里,下一次访问WebServer的时候,再把Cookie的信息放到HTTPRequest的“Cookie”header属性里面,这样jsessionid就随着HTTPRequest返回给WebServer。我们来看Tomcat5的源代码如何支持jsessionid。org.apache.coyote.tomcat5.CoyoteResponse类的toEncoded()方法支持URL重写。StringtoEncoded(Stringurl,StringsessionId){…StringBuffersb=newStringBuffer(path);if(sb.length()0){//jsessionidcan'tbefirst.sb.append(";jsessionid=");sb.append(sessionId);}sb.append(anchor);sb.append(query);return(sb.toString());}我们来看org.apache.coyote.tomcat5.CoyoteRequest的两个方法configureSessionCookie()doGetSession()用Cookie支持jsessionid.protectedvoidconfigureSessionCookie(Cookiecookie){…}HttpSessiondoGetSession(booleancreate){…//Creatinganewsessioncookiebasedonthatsessionif((session!=null)(getContext()!=null)getContext().getCookies()){Cookiecookie=newCookie(Globals.SESSION_COOKIE_NAME,session.getId());configu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论