web项目 Cookie的删除操作 刷新时Cookie数量变动

问题描述:

在web项目中想要测试cookie的删除操作,也就是cookie.setMaxAge(0)操作,明明删除了所有的cookie,但是刷新一次浏览器,也就是重复一次请求后cookie的数目有变化。



解决:

重点,需要了解request 和response的运行机制:

代码:
  <%
    Cookie myCookie1 = new Cookie("myCookieName9","myCookieValue1");
    response.addCookie(myCookie1)
    Cookie temp = null
    Cookie[] cookieArr
    cookieArr = request.getCookies()
    int time = 0
    int length = 0
    if(cookieArr != null
      length = cookieArr.length
    out.println("length is :" + length+"<br>")

    for(time = 0; time < length;time++){
      temp = cookieArr[time]
      temp.setMaxAge(0);           //删除cookie操作
      response.addCookie(temp);   //一定要有此操
      if(temp != null){
        out.println("cookie's name :"+temp.getName()+"<br>")
        out.println("cookie's value :"+temp.getValue()+"<br>")
      }else
        out.println("there is no cookie" );
}
  %>



1、第一次请求

在浏览器第一次输入url请求,当请求发送到客户端时候request是没有cookie的,所以length的值为0,代码不进入for循环,所以页面只会执绿色部分,也就是只会显示length =  0;


但是的注意的是,这个时候因为执行了 response.addCookie(myCookie1)语句,当服务器响应浏览器请求时response里面有cookie,而且有两个cookie,一个是记录session(会话),另一个是自己new的cookie。 所以在浏览器端虽然显示了length为0,其实现在在浏览器端是有两个cookie的!!!


2、第二次请求

当刷新浏览器时候,浏览器再次向服务器(tomcat)发送请求,这个request中是有两个cookie的。 
但是执行到 response.addCookie(myCookie1)语句不会在response中重复添加,因为cookie名一样(也就是myCookieName9,不是对象名)。
接着,length的值为2。。
代码进入for循环,此时数组中有两个cookie,都是从request中获取的。
执行到下面红色的两条删除操作时候 意为在浏览器端删除cookie,并不会在服务器立马删除,而是会将cookie add到response中发送到浏览器端,在浏览器端进行删除
所以紧接着的两条out语句照样会输出之前的两个cookie。。所以执行完毕后将response发送到浏览器,里面包含两个MaxAge = 0的cookie, 意为在浏览器删除这两个cookie(也就是下一次请求request中不含这两个cookie),执行结果为:

此时浏览器中其实是没有cookie的,所以到第三次request请求,resquest中是没有cookie的,所以又会回到第一次请求的结果中。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值