我的测试人生........

【转】Web测试你需要知道的HTTP(2)—cookie与session的实现

上一篇 / 下一篇  2015-09-16 21:39:56 / 个人分类:测试技术

  实现机制:
  浏览器首次访问服务器,发送请求如果没有带身份,服务器检测不到cookie会返回一个登录窗口,输入用户名和密码后再次请求,服务器接受到表单提 交上来的用户信息后验证通过,返回一个相应的请求页,并在HTTP头中添加setcookie信息,浏览器接受到返回内容后会处理http头部的相应信 息,这里会设置cookie,第二次用户访问服务器时会浏览器会自动把cookie内容读取出来并加到http头部,服务器接受请求后验证提交过来的 cookies是否正确,正确直接就返回相应的页面,不正确则返回登录页面。
  Cookie的分类:
  根据存放的位置可以分为持久化的cookie和临时cookie;持久化cookies就是会存放在%userprofile%/cookies目录下的文本文件;临时cookie是存放在内存中的cookie,又成session cookie或进程cookie。
  作用域:
  cookie的作用域是根据域名和路径来决定的,域名和路径限制的越小,其作用域就越小。如.sina.com.cn >sina.com.cn>sina.com.cn/news/。第一个是所有以sina.com.cn为基础域名的网页都可以用;第二个只 有www.sina.com.cn域名的页面及子路径下的页面可以用;第三个只有www.sina.com.cn/news/下的网页可以用。
  另临时cookie的作用域和session一样,只有当前浏览器及其子窗口可以共享。
  有效期:
  cookie的有效期有3种状态:大于0的数值为相应的有效期的时长;等于0相当与做了一个删除操作;小于0就是说不生成持久化cookie,只是临时的。
  浏览器处理流程:
  浏览器对cookie首先有限制,比如IE对cookie总数有限制(300个),另外另外每个cookie文件的cookie数有限制(50 个),单个cookie文件的大小有限制(4K),当cookie数达到上限时就会删除前面的cookie,IE的处理方式是最近最少使用的原则。此外浏 览器在接受到http头中的cookie设置标识后会在相应目录下生产cookie文件,文件名为user@domain【index】形式,这是浏览器自动生成的,user为系统当前用户名,domain为访问页面的域名,index应该是cookie的修改次数,而且当前打开的页面所携带的cookie一定是index最大的cookie文件里的内容。
  多cookie:
  一个页面只对应一个cookie文件,一个cookie文件里可以保存若干个cookie,每个cookie有自己的有效期、作用域等,所以一个页 面可以对应多个cookie,除此之外还包括内存里的临时cookie;但是一个cookie文件可以对应多个页面,但是这些页面都是同一个主域名下的。
  Session
  实现机制:
  session是浏览器访问了服务器通过验证后,服务器发给浏览器的一个身份凭证,并且服务器自己也保存一个一样的ID序列;在下次浏览器访问的时 候会来上session的信息,服务器端会坚持session的值在服务器端有没有保存,有保存说明此用户以通过了验证就直接返回请求的页面,并且对提交 的数据依据此sessionID进行相应处理;如没有找到相同的session的值,则说明此session可能失效,或是无效的,服务器会重新验证身份 并发送一个新的sessionID。
  实现方式:
  session通常有2种方式去实现:一种就是上面提到的session cookie,把服务器把sessionID作为cookie的内容保存在内存中,就是所谓的临时cookie中,每次请求都以cookie的形式传给服 务器;另一种是在浏览器cookie被禁用的情况下如何实现sessionID的提交,当服务器检测到cookie被禁用后,服务器在返回相应页面之前对 原先的URL 进行一次重编码,把sessionID的值连接到URL后面,下次浏览器请求时sessionID就以get方式传给了服务器,服务器接受后进行相关验证 和处理。
  作用域:
  session的作用域可以看作是和浏览器进程想关联,只有当前页面及其子页面【继承页面】可以公用一个sessionID,跨浏览器和跨域名都不能公用一个sessionID。因此同时用2个浏览器访问同一个地址时会返回2个不同的sessionID。
  有效期:
  session的有效期就是通过验证的浏览器进程的生命周期,进程结束后内存被释放,session自然就没有了,此时在服务器端的 sessionID还没有删除【如果是URL方式传送session的话,不知道在关了浏览器后重新用之前带有session的URL访问,会有成功 么?】;另一种情况是浏览器没有关,但是已经长时间没有和服务器交互了,并且服务器端检测到这个sessionID在规定范围内没有请求动作,就会认为是 一个过期的sessionID,直接在服务器端给删除了,这种失效与服务器配置有关。
  浏览器处理流程:
  浏览器处理session的过程其实就是处理临时cookie的过程,当浏览器接受到临时cookie时,直接保存在浏览器对应页面的内存中,下次请求时再直接附带上就O了。
  多Session:
  多个session同时存在很简单,直接起多个单独的浏览器,访问服务器就行了。各session间也不会有影响的,否则做并发测试时就很头疼了。

TAG: Cookie cookie

 

评分:0

我来说两句

Open Toolbar