文档库 最新最全的文档下载
当前位置:文档库 › cookie测试

cookie测试

cookie测试
cookie测试

Cookie提供了一种在Web应用程序中存储用户特定信息的方法,例如存储用户的上次访问时间等信息。假如不进行cookie存储一个网站的用户行为,那么可能会造成以下问题:用户进行购买几件商品转到结算页面时,系统怎样知道用户之前订了哪几件商品。因为,cookie其中一个作用就是记录用户操作系统的日志,而系统对cookie不单单是存储,还有读取,也就是说系统和用户之前是一个交互的过程,这称为有状态。

但是Cookie在带来这些编程的方便性的同时,也带来了安全上的问题。Cookie的安全性问题与从客户端获取数据的安全性问题是类似的,可以把Cookie看成是另外一种形式的用户输入,因此很容易被黑客们非法利用这些数据。由于Cookie保存在客户端,因为在客户端可以直接看到Cookie中存储的数据,而且可以在浏览器向服务器端发送Cookie之前更改Cookie 的数据。因此,对Cookie 的测试,尤其是安全性方面的测试非常重要,是Web应用系统测试中的重要方面。

·如何判断正在测试的Web系统使用了cookie

在进行Cookie测试之前,首先要判断被测试的Web应用系统是否使用了Cookie。当然可以找出web系统的设计文档、功能规格说明书来看个究竟,或者直接问开发人员。除此之外,还有更加直接的办法:

(1)找到电脑中存储cookie的目录。

需要注意的是不同的浏览器把Cookie数据存储在不同的目录,

IE浏览器把Cookie数据存储在类似下面的目录:

C:\Documents and Settings\user\Local Settings\Temporary Internet Files

(2)删除所有cookie。

在IE中,cookie与缓存的临时文件存储在一起。可使用IE中的删除Cookies文件功能来删除所有Cookie,也可直接找到存储Cookie文件的目录进行删除。打开IE浏览器,选择菜单“工具| Internet选项”(或者按快捷方式“Ctrl+Shift+Delete”),如图1所示。

图1 Internet选项

单击“删除Cookies”按钮,出现如图2所示的对话框。单击“确定”按钮,把所有Cookie文件删除掉。

2 删除Cookies

(3)设置IE,当使用到Cookie时自动提示。

如果想确切地知道测试的Web系统在什么地方使用了Cookie,可以对IE浏览器进行一些设置,让IE浏览器在使用到Cookie时自动弹出提示窗口,这样测试时就能知道在什么时候、什么功能操作使用到了Cookie。

IE的设置方法是:打开IE菜单“工具| Internet选项”,切换到“隐私”页面,如图3所示。

图3 设置IE

单击“高级”按钮,出现如图4所示的界面。

图4 高级隐私策略设置

选择“覆盖自动cookie处理”,在“第一方Cookie”处选择“提示”,在“第三方Cookie”

处也选择“提示”,然后单击“确定”按钮。这样,当Web页面使用到Cookie时,IE浏览

器会自动提示如图5所示的界面。

5 隐私警报

说明:单击其中的“详细信息”,可以看到如图6所示的

Cookie详细信息。包括

Cookie的名称、来源、路径、数据、截止期限等信息。

图6查看详细的Cookie信息

·Cookie测试方法- 屏蔽Cookie

这是最简单的Cookie测试方法,检查当Cookie被屏蔽时Web系统会出现什么问题。

首先关闭所有浏览器实例,删除测试机器上的所有cookie。设置IE屏蔽Cookie,可通过把IE的“隐私”设置为如图7所示的“阻止所有Cookie”。

图7阻止所有Cookie

然后运行Web 系统的所有主要功能,很多时候会出现功能不能正常运行的情况。如果用户必须激活Cookie使用设置才能正常运行web系统的话,则需要检查Web服务器是否能正确识别出客户端的Cookie设置情况,当用户屏蔽了Cookie时,Web服务器应该发送一个提示页面,告诉用户激活Cookie设置才能使用系统(测试用例)。

·Cookie测试方法- 有选择性地拒绝Cookie

这种测试方法的目的是验证这种情况:如果某些Cookie被接受,某些Cookie被拒绝,

Web系统会发生什么事情

首先删除测试机器上的所有Cookie,然后设置IE 的Cookie选项,当Web系统试图设置一个Cookie时弹出提示。然后运行Web系统的所有主要功能。在弹出的Cookie提示中,接受某些Cookie,拒绝某些Cookie。检查Web 系统的工作情况,看Web服务器是否能检测出某些Cookie被拒绝了,是否出现正确的提示信息。有可能Web系统会因为这样而出现错误、崩溃、数据错乱,或其他不正常的行为。

例如在测试过程中,对前面的用于测试浏览器是否接受Cookie的“测试Cookie”都予

以接受,但是对后面的设置Cookie则予以拒绝,那么如果后续的代码要依赖所设置的Cookie时,则会出错。例如下面的代码中,读取Cookies部分的代码如果没有判断Cookie是否存

在,则会出现异常。

·Cookie测试方法- 篡改Cookie

如果某些存储下来的Cookie被篡改了,或者被删除了,Web系统会出现什么问题吗

如果Web系统不能检测到Cookie数据被篡改了,则很可能出现功能异常,或者数据错乱等问题。优秀的设计则会检测到Cookie数据的篡改,及时更新替换Cookie文件。

假设有如下页面,根据Cookie判断访问者的到访顺序,并且根据到访顺序做出相应的业务处理,如果是第8位访问者,则送出奖品,那么就可能导致别有用心者通过篡改Cookie数据来获得奖品。

protected void Page_Load(object sender, EventArgs e)

{

int counter;

if ["counter"] == null)

{

counter = 0;

}

else

{

alue);

}

counter++;

alue = ();

["counter"].Expires

= }

可以通过修改存储下来的Cookie数据来达到不公平竞争的目的,查找到这个

页面使用的Cookie文件并用文本编辑工具打开,可看到类似如下信息:counter

3

1536

28

4

*

把counter 后面的值改

为7 (注意修改前要关闭浏览器)。然后再次访问上面的

页面,则counter值变成了8,页面提示“您是第8位访问者!”。

说明:测试过程中应该查找是否有业务逻辑是依赖Cookie存储值而进行的,如果有,

则尝试修改Cookie 的值,看是否导致功能不正常,或者业务逻辑的混乱。另外,也可以尝

试有选择性地删除Cookie。在运行Web 系统一段时间后,把其中某些Cookie文件删除掉,

然后继续使用Web 系统,看会出现什么情况,是否能恢复、是否有数据丢失或错乱。

·Cookie测试方法- Cookie加密测试

检查存储的Cookie文件内容,看是否有用户名、密码等敏感信息存储,并且未被加密处理。某些类型的数据即使是加密了也绝对不能存储在Cookie文件中的,例如:信用卡号。

测试的方法可以手工地打开所有Cookie文件来查看,也可以利用一些Cookie编辑工具来查看,例如,如图8所示的Cookie Editor。

图8 Cookie Editor界面

利用Cookie Editor,可以列出所有Cookie文件,还可以在

Cookie文件中搜索内容,如

图9所示。

图9搜索Cookie

说明:在“Look for”的输入框中输入需要查找的内容,例如username、password等敏

感信息的关键字,单击“Go”按钮进行查找。

·Cookie安全内容检查

Cookie安全内容检查包括前面讲的存储内容的检查,还包括以下方面:

(1)Cookie过期日期设置的合理性:检查是否把Cookie的过期日期设置得过长。

(2)HttpOnly属性的设置:把Cookie的HttpOnly属性设置为True有助于缓解跨站点脚本威胁,防止Cookie被窃取。

(3)Secure属性的设置:把Cookie的Secure属性设置为True,在传输Cookie时使用SSL连接,能保护数据在传输过程中不被篡改。

对于这些设置,可以利用Cookie Editor来查看是否正确地被设置,如图10所示。

图10 查看Cookie的设置

说明:可在“Expiration Date and Time”中查看Cookie的过期日期设置是否合理,查“HttpOnly”和“Secure”是否勾选上,勾选上表示设置为True。在

“Cookie Value”中可查看是否存在敏感信息,数据是否经过加密

Cookie用法大全

COOKIE用法大全ASP中的Cookie用法:Cookie是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个Web站点会话之间持久地保持数据。Reque st和Response对象都有一组Cookie。Request.cookie集合是一系列Cookie,从客户端与HTTP Request一起发送到Web服务器。反过来,如果你希望把Cookie发送到客户机,就可以使用Response.Cookies. 1、Expires属性该属性可以赋一个日期,过了这个日期Cookie就不能再被使用了。通过给Expires属性赋一个过期的日期,就可以删除Cookie。如:<%Response.cookies("passtime").Expires=DateAdd("m", 1, NOW)%> 这样设置Cookie在一个月后过期。2、Domain属性该属性定义Cooki e要传送的唯一域。如:Cookie只传送给Microsoft的人,则可以使用以下代码。<%R esponse.Cookies("domain").Domain="https://www.wendangku.net/doc/b52750366.html,/"%> 3、ASP 用来写入Cookie即向客户机发送Cookie的语法如下:Response.Cookies("C ookie名").[("键名").属性]=内容如果某个ASP文件要创建一个Cookie,则下面的代码可以放在ASP文件的第一个之前,以避免产生错误. <%Response.Cookie s("CookieName")="NewCookie" %> ...... 4、同样ASP用Re quest对象的Cookies集合来读取Cookie,如:<%Response.write Request.Cooki es("CookieName")%> 下面以一个完整的例子来说明Cookie:<% dim Num Num=Request.Cookies("Visit_num") if Num>0 then Num=Num+1 Response. write "您已是第" & Num & "次访问本站点了。" else Response.write "欢迎您首次访问本站。" Num=1 end if Response.Cookies("Visit_num")=Num %> 在该例子中,首先读取Cookies变量Visit_num,看用户端计算机是否保存有Cookies变量。如果有该变量,则说明用户已经访问过该页面,同时输入出访问次数。如果用户是首次访问该页面,则其计算机内不会有Cookies变量,程序会显示“欢迎”字样,然后将Cookies变量Visit_num存到用户计算机中,以便该用户下一次访问该页面时给出“访问的次数”信息。 5、Cookie字典有时在一个页面中可能需要定义很多个Cookies变量,为了更好地管理它,在Cookies组件中常引入一人的概念“子键”。引用它的语法如下:Request. Cookies("变更名")("子键名")如下面的Cookie创建一个名为"Dictionary"的字典,其中保存了三个键值:<% Response.Cookie("info")("Myname")="jeff" Resp onse.Cookie("info")("Gender")="male" Response.Cookie("info")("Myheight")= "172" %> 事实上客户机上的Cookie字典是以字符串的形式存在:info=Myname

跨域获取cookie,多个网站实现一键登录

A网站首页PHP(也可以在登录页面加入下面的代码)加入如下代码 view plaincopy to clipboardprint? 1. A网站增加文件getcookies.php,目的是为了让B网站可以以ajax方式来查询A网站的cookie getcookies.php 代码如下 view plaincopy to clipboardprint? 1.$winduid,'msg'=>$msg)); 4.//可以用json_encode自动转换,也可以手写json格 式 $json_data = '{"mywinduid":'.$mywinduid.'}'; 5.$json_data = json_encode(array('mywinduid'=>$mywinduid)); 6.//必需以下这样形式输出,重点就是发送请求的网页的参数中要有jsoncallback参 数 7.echo $callback.'('.$json_data.')'; 8.?> 在需要查询A网站cookie的B网站页面中增加如下代码 view plaincopy to clipboardprint? 1. 2.

Kristenscookiecompany案例分析

Kristen’s cookie company案例分析 一、案例背景介绍 本案例主要介绍的是好室友1和好室友2要在学校里开一家饼干公司。该公司根据订单情况,提供定制化的产品。并且,公司的订单必须是完全新鲜的,因此在接到订单之前不能烘烤饼干。Kristen饼干的制作流程很简单,第一个步骤是接到订单,接订单的时间忽略不计;然后是清洗制作上一批产品时,用于混合原材料的碗,接着进行搅拌,清洗和搅拌的过程需要6分钟;将饼干放入烤盘,需要2分钟;接着把饼干放入烤箱并设定时间和温度,这个过程需要1分钟的时间;烤制饼干需要9分钟;饼干烤熟之后,进行5分钟冷却;继而进行包装,需要2分钟;最后收钱需要1分钟。 在这个过程中,好室友1需要做的是清洗和搅拌工作以及把饼干放入烤盘;好室友2需要做的是讲饼干放入烤箱并设定时间和温度,把烤好的饼干进行包装,以及最后的收费工作。 在这个过程中涉及到的成本主要有:原料成本——0.6美元/打;用来包装饼干的盒子成本——0.1美元/打,这种盒子每个只能装1打饼干;好室友1和好室友2的时间成本。 二、案例说明 1、时间以及成本 根据案例,我们对饼干制作流程以及制作过程中的人员分配进行简单归纳,见表1. 表1:各项流程耗时及人员说明 2、流程分析 为了更好的理解Kristen饼干制作时的过程,我们绘制出整个饼干产品生产的流程图。

6分钟/次 2分钟/盘 9分钟/次5分钟/次2分钟/打1分钟/单 图1:饼干制作流程图 3、其他 饼干是完全新鲜的,因此在接到订单之前不能烘烤饼干。 三、案例分析 1、你需要多长时间来处理一个紧急的订单? 为了简化分析,我们首先来考虑一种比较简单的情况,即对问题做出如下基本假设: 假设1:仅分析订单单位均为1打的情况,即我们假设,紧急订单都需要的是1打饼干。 假设2:如果紧急订单到达时有正在处理的订单,则正在处理的订单之后无订单。(即正在处理的订单之后就马上是紧急订单) 假设3:烤箱、烤盘、搅拌器均只有一个。 在分析之前,我们定义一个函数()y i 。()y i 表示完成每一个生产流程所需要的时间。其中,i 表示的是根据图1所表示的生产流程进行到第i 个步骤,取值为1,2,...,7i 。根据案例背景,我们很容易得到()y i 的表达式如下: (1)紧急订单之前,好室友1和好室友2是闲暇的,即不存在排队情况。那么

使用Cookie记录用户名和密码

使用Cookie记录用户名和密码 一、用户登录操作 在用户填写登录数据后,提交表单进行登录验证,如果用户名和密码正确,则把用户名和密码保存在客户端。页面如图1所示 实现代码如下所示。 ... response.setContentType("text/html;charset=gbk"); //获取用户名 String userName = request.getParameter("username"); //获取用户密码 String password = request.getParameter("password"); //验证用户是否合法 if ("accp".equals(userName) && "accp".equals(password)) { //如果合法,把用户名和密码保存在客户端Cookie中 //获取客户选择的Cookie保存时间 String cookieDate = request.getParameter("cookieDate"); int date = 0; if (cookieDate != null && cookieDate != "") date = Integer.parseInt(cookieDate); //创建用户名Cookie对象 Cookie cookieName = new Cookie("accpLoginName", userName); //设置Cookie保存时间 cookieName.setMaxAge(date); //添加到客户端 response.addCookie(cookieName);

Cookie cookiePass = new Cookie("accpLoginPass", password); //设置保存Cookie时间 cookiePass.setMaxAge(date); //添加到客户端 response.addCookie(cookiePass); response.sendRedirect("success.jsp"); } else { response.sendRedirect("fail.jsp"); } ... 二、用户再次登录时操作 服务器首先读取客户端Cookie信息,如果存在用户名和密码数据,则直接登录,否则显示登录页面。 实现代码如下所示。 response.setContentType("text/html;charset=gbk"); //用户名和密码是否存在以及合法的判断参数 boolean bool=false; //获取客户端Cookie数组 Cookie[] cookies = request.getCookies(); //判断客户端是否存在Cookie对象 if (cookies != null) { //预定义保存用户名和密码的变量 String userName = ""; String password = ""; //遍历Cookie数组 for (int i = 0; i < cookies.length; i++) { //取得每一个Cookie对象 Cookie cookie = cookies[i]; //判断Cookie的名称是否等于"accpLoginName" if ("accpLoginName".equals(cookie.getName())) { userName = cookie.getV alue(); } //判断Cookie的名称是否等于"accpLoginPass" if ("accpLoginPass".equals(cookie.getName())) { password = cookie.getV alue(); } }

深入理解ServletJSP之Cookie和Session原理

由于H T T P协议的无状态特征,W e b应用中经常使用C o o k i e和S e s s i o n来保存用户在与系统交互过程中的状态数据。下面通过分析H T T P协议对C o o k i e和S e s s i o n的工作原理加以了解。 一、C o o k i e C o o k i e的含义是“服务器送给浏览器的甜点”,即服务器在响应请求时可以将一些数据以“键-值”对的形式通过响应信息保存在客户端。当浏览器再次访问相同的应用时,会将原先的C o o k i e通过请求信息带到服务器端。 下面的S e r v l e t展示了C o o k i e的功能。 ......... p u b l i c v o i d d o G e t(H t t p S e r v l e t R e q u e s t r e q u e s t,H t t p S e r v l e t R e s p o n s e r e s p o n s e) t h r o w s S e r v l e t E x c e p t i o n,I O E x c e p t i o n{ r e s p o n s e.s e t C o n t e n t T y p e("t e x t/h t m l"); P r i n t W r i t e r o u t=r e s p o n s e.g e t W r i t e r(); S t r i n g o p t i o n=r e q u e s t.g e t P a r a m e t e r("o p t i o n"); i f("s h o w".e q u a l s(o p t i o n)){ //获得请求信息中的C o o k i e数据 C o o k i e[]c o o k i e s=r e q u e s t.g e t C o o k i e s(); i f(c o o k i e s!=n u l l){ //找出名称(键)为“c o o l”的C o o k i e f o r(i n t i=0;i"+c o o k i e s[i].g e t N a m e()+":" +c o o k i e s[i].g e t V a l u e()+""); } } } }e l s e i f("a d d".e q u a l s(o p t i o n)){ //创建C o o k i e对象 C o o k i e c o o k i e=n e w C o o k i e("c o o l","y e a h!"); //设置生命周期以秒为单位 c o o k i e.s e t M a x A g e(20); //添加C o o k i e r e s p o n s e.a d d C o o k i e(c o o k i e); }

Java基础-关于session的详细解释

Java基础-关于session的详细解释 session, Java, 基础, 解释 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的 含义是相同的。 session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义①,其中的差 别只能靠上下文来推断②。 然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到对方接了

电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道不一定能建立,但对发信人来说,通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP s ession”或者“一个POP3 session”③。 而到了web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案④。有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里”⑤。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java 里提供的javax.servlet.http.HttpSession简称为session⑥。 鉴于这种混乱已不可改变,本文中session一词的运用也会根据上下文有不同的含义,请大家注意分辨。 在本文中,使用中文“浏览器会话期间”来表达含义①,使用“session机制”来表达含义④,使用“session”表达含义⑤,使用 具体的“HttpSession”来表达含义⑥

WINDOW.OPEN各属性及用法详解

一、window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+二、基本语法:window.open(pageURL,name,parameters)其中:pageURL为子窗口路径name为子窗口句柄parameters为窗口参数(各参数用逗号分隔)三、示例:脚本运行后,page.html将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。请对照。上例中涉及的为常用的几个参数,除此以外还有很多其他参数,请见四。四、各项参数其中yes/no也可使用1/0;pixel value为具体的数值,单位象素。参数|取值范围|说明alwaysLowered|yes/no|指定窗口隐藏在所有窗口之后alwaysRaised|yes/no|指定窗口悬浮在所有窗口之上depended|yes/no|是否和父窗口同时关闭directories| yes/no|Nav2和3的目录栏是否可见height|pixel value|窗口高度hotkeys|yes/no|在没菜单栏的窗口中设安全退出热键innerHeight| pixel value|窗口中文档的像素高度innerWidth|pixel value|窗口中文档的像素宽度location|yes/no|位置栏是否可见menubar|yes/no|菜单栏是否可见outerHeight|pixel value|设定窗口(包括装饰边框)的像素高度outerWidth|pixel value|设定窗口(包括装饰边框)的像素宽度resizable|yes/no|窗口大小是否可调整screenX|pixel value|窗口距屏幕左边界的像素长度screenY|pixel value|窗口距屏幕上边界的像素长度scrollbars|yes/no|窗口是否可有滚动栏titlebar|yes/no|窗口题目栏是否可见toolbar|yes/no|窗口工具栏是否可见Width|pixel value|窗口的像素宽度z-look|yes/no|窗口被激活后是否浮在其它窗口之上 =================================== ==================【1、最基本的弹出窗口代码】其实代码非常简单:因为着是一段javascripts代码,所以它们应该放在之间。是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作为文本显示出来。要养成这个好习惯啊。Window.open ('page.html')用于控制弹出新的窗口page.html,如果page.html不与主窗口在同一路径下,前面应写明路径,绝对路径(http://)和相对路径(../)均可。用单引号和双引号都可以,只是不要混用。这一段代码可以加入HTML的任意位置,和之间可以,间也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前放。【2、经过设置后的弹出窗口】下面再说一说弹出窗口的设置。只要再往上面的代码中加一点东西就可以了。我们来定制这个弹出的窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。