<SCRIPT Language="VB" Runat="Server">
Sub Page_load(Sender As Object,e As Eventargs)
   Dim i As Short
   Response.Cookies("Cookie1").Value="Microsoft Visual Stidio Net " 
   Response.Cookies("Cookie2").Value="Asp.net"
   Response.Write("本站点的Cookie数量为:" & Request.Cookies.Count & "<BR>")
   For i=0 To Request.Cookies.Count-1
       Response.Write("变量名称:" & Request.Cookies.Item(i).Name & _
       " 变量内容:" & Request.Cookies.Get(i).Value & "<Br>")
   Next
End Sub
</SCRIPT>以上代码保存为1.aspx后,在地址栏中输入localhost/1.aspx 时,显示如下:
本站点的Cookie数量为:2
变量名称:Cookie1 变量内容:Microsoft Visual Stidio Net
变量名称:Cookie2 变量内容:Asp.net但一刷新后就变成了:
本站点的Cookie数量为:4
变量名称:Cookie1 变量内容:Microsoft Visual Stidio Net
变量名称:Cookie2 变量内容:Asp.net
变量名称:Cookie1 变量内容:Microsoft Visual Stidio Net
变量名称:Cookie2 变量内容:Asp.net但是之后不管怎么刷新都是这个结果了。这是为什么呢?我的问题在于:为什么第一次刷新后多了两个,但不管还是那个结果了呢就?很是不解!第一次刷新为什么不覆盖呢反而变成4个了,如果就是不覆盖的话那第二次第三次为什么就不再增加了呢?哪位高手能解释下?谢谢了。我是新手,刚学不久。问题出在哪?

解决方案 »

  1.   

    唉,这个真是.....不外乎一个asp.net页面生命期模型的基本问题。当Page_load执行的时候,之前请求服务器的http命令中标记了2个cookie值,同时程序创建了2个准备写出去的cookie值,然后page_load执行完(以及其它事件执行完),页面输出了html给浏览器,服务器销毁了这个这个页面对象实例,浏览器记录了cookie(此时是4个)。然后再次提交(刷新url),此时同一个url下浏览器组织起的请求服务器的http命令中就标记了4个cookie值。
      

  2.   

    第一次只有两个准备送到客户端的cookie
    所以显示为2刷新后,
    从客户端送来有2个,服务器端准备送到客户端2个.
    这样,以后刷新永远是2+2=4
      

  3.   

    第一次访问时: 
    Request.Cookies集合中没有“Cookie1”,“Cookie2”
    当使用 Response.Cookies添加“Cookie1”,“Cookie2”时Request.Cookies集合中被添加两个新的Cookie
    所以第一次为2
    再次访问时Request.Cookies集合中已包含“Cookie1”,“Cookie2”
    当使用 Response.Cookies添加“Cookie1”,“Cookie2”时并没有覆盖Request.Cookies集合中“Cookie1”,“Cookie2”而是在请求结束后,覆盖浏览器中的“Cookie1”,“Cookie2”,所以此时为4, 当用索引访问Request.Cookies集合的Cookie时会包含新的和旧的值,使用名称访问得到的是旧的值,这个值会在请求结束后被Response.Cookies集合中相同名字的Cookie覆盖
      

  4.   


    难道Response.Cookies的Cookies 和 Request.Cookies的Cookies 不是同一个Cookies吗?
    Response对象和Request对象访问的不是同一个Cookies吗?
      

  5.   

    Request.Cookies是客户端提交上来的Cookie
    Response.Cookies是服务器将要发送给客户端的Cookie
      

  6.   


    我认为:第一次访问时: 
    Request.Cookies集合中没有“Cookie1”,“Cookie2”
    当使用 Response.Cookies添加“Cookie1”,“Cookie2”时Request.Cookies集合中被添加两个新的Cookie
    所以第一次为2。
    再次访问时,Request.Cookies集合中已包含“Cookie1”,“Cookie2”
    当使用 Response.Cookies添加“Cookie1”,“Cookie2”,覆盖浏览器中的“Cookie1”,“Cookie2”,所以浏览器端面仍为2。 当用索引访问Request.Cookies集合的Cookie时,因为Request.Cookies已经包含上次两个旧值了,再从浏览器端取了两个新的加入自己的Cookies中,所以对Request.Cookies中是四个了,是重复的两对。
    之后Request.Cookies会在请求结束后被 Response.Cookies集合覆盖。变成两个。下次刷新,再加两个,还是四个。
    所以每次再刷新Request.Cookies始终是四个了。
    每次请求,Request.Cookies会在请求结束后被 Response.Cookies集合覆盖,当然也包括第一次。