问答详情
源自:8-8 使用Cookie实现保存商品浏览记录

为什么第一次点击商品详情的时候就会有这次浏览的记录呢?

String list ="";

             

              //从客户端获得Cookies集合

              Cookie[] cookies = request.getCookies();

              //遍历这个Cookies集合

              if(cookies!=null&&cookies.length>0)

              {

             for(Cookie c:cookies)

             {

                 if(c.getName().equals("ListViewCookie"))

                 {

                    list = c.getValue();

                 }

             }

         }

              

              list+=request.getParameter("id")+",";

              //如果浏览记录超过1000条,清零.

              String[] arr = list.split(",");

              if(arr!=null&&arr.length>0)

              {

                  if(arr.length>=1000)

                  {

                      list="";

                  }

              }

              Cookie cookie = new Cookie("ListViewCookie",list);

              response.addCookie(cookie);

按照这代码的执行顺序 第一次点击时list应该是为空的呀,为什么就会有这次的浏览记录呢

提问者:一只土豆 2015-12-25 22:14

个回答

  • bigpeng
    2015-12-27 00:44:05
    已采纳

    我来解释下:

                  String list ="";
                  //从客户端获得Cookies集合
                  Cookie[] cookies = request.getCookies();
                  //遍历这个Cookies集合
                  
                  if(cookies!=null&&cookies.length>0)
                  {
                      for(Cookie c:cookies)
                      {
                          if(c.getName().equals("ListViewCookie"))
                          {
                             list = c.getValue();
                          }
                      }
                  }
                  
                  list+=request.getParameter("id")+",";


    看到这里的  list+=request.getParameter("id")+",";    代码没有。 这句话的意思是,先把你当前浏览的页面ID加入进list中,同时,

                  String[] arr = list.split(",");
                  if(arr!=null&&arr.length>0)
                  {
                      if(arr.length>=1000)
                      {
                          list="";
                      }
                  }
                  Cookie cookie = new Cookie("ListViewCookie",list);
                  response.addCookie(cookie);

    中的 response.addCookie(cookie); 已经把它写入cookie了。所以,接下来的:

                  Cookie cookie = new Cookie("ListViewCookie",list);
                  response.addCookie(cookie);
              
              %>
              <!-- 浏览过的商品 -->
              <td width="30%" bgcolor="#EEE" align="center">
                 <br>
                 <b>您浏览过的商品</b><br>
                 <!-- 循环开始 -->
                 <%
                    ArrayList<Items> itemlist = itemDao.getViewList(list);
                    if(itemlist!=null&&itemlist.size()>0 )
                    {
                       System.out.println("itemlist.size="+itemlist.size());
                       for(Items i:itemlist)
                       {
                             
                 %>


    这句代码就开始将cookie遍历,但是,cookie在之前已经写入id了,所以浏览记录显示是晚于cookie写入的。

    这句是原因,不知道你看懂了没有。

  • Sxy97
    2016-10-30 21:02:59

    遍历的时候,从倒数第二个开始就好了