求cookie的具体使用例子  详细 

解决方案 »

  1.   

    设置cookie<?php
    $value = 'something from somewhere';setcookie("TestCookie", $value);
    setcookie("TestCookie", $value, time()+3600);  /* expire in 1 hour */
    setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
    ?> 使用cookie<?php
    // Print an individual cookie
    echo $_COOKIE["TestCookie"];
    echo $HTTP_COOKIE_VARS["TestCookie"];// Another way to debug/test is to view all cookies
    print_r($_COOKIE);
    ?> 
      

  2.   

    cookie和数组的结合实现购物车
    转自:http://www.phpzc.com/read.php?tid-775.html
    发现php很多函数得到的结果都是数组给出的,最常用的就是mysql_fetch_array(),
    包括取得的字符串信息生成数组,再由数组分解成字符串用的函数explode(); implode();以前也没有写过购物车之类的实现,自觉属于愚笨的那种类型,断断续续写了一个星期,琢磨了(姑且允许作为一个新手自大一下)购物车的处理程序。
    又因为一直没有入class的门,所以还是面向过程吧。我用的方法本质是:把cookie存入array,对array进行增加、删除、修改操作,array中的每一组记录都是一个商品的信息(个数,价格等)解决购物车的思路是用cookie记录一个二维数组。一维代表每一个商品,二维包含了商品的id,商品的数量...等可以自行增加,反正都是二维了,自己愿意带多少个商品属性就加上去。对购物车里商品的操作一般有以下几个:添加商品,修改商品数量,删除商品,清空购物车。
    这几个操作都是针对cookie的。每次把cookie中的数组取出来,增加、修改、删除一番,再记录到cookie中。至于清空购物车,那就更简单了,直接设置同名的cookie为空就可以了。下面是我写的具体操作函数
    //加入购物车 
     function addcart($goods_id,$goods_num){ 
      
     $cur_cart_array = unserialize(stripslashes($_COOKIE['shop_cart_info'])); 
      if($cur_cart_array==""){ 
      
       $cart_info[0][] = $goods_id; 
       $cart_info[0][] = $goods_num; 
       
       setcookie("shop_cart_info",serialize($cart_info)); 
       
      }elseif($cur_cart_array<>""){ 
       
       //返回数组键名倒序取最大 
       $ar_keys = array_keys($cur_cart_array); 
       rsort($ar_keys); 
       $max_array_keyid = $ar_keys[0]+1; 
       
       //遍历当前的购物车数组 
       //遍历每个商品信息数组的0值,如果键值为0且货号相同则购物车存在相同货品 
       foreach($cur_cart_array as $goods_current_cart){ 
        foreach($goods_current_cart as $key=>$goods_current_id){ 
         if($key == 0 and $goods_current_id == $goods_id){ 
       echo "<script language=javascript>"; 
       echo "if(confirm('购物车已经有该商品,继续购物按----确定!查看购物车按----取消!'))"; 
       echo "{history.go(-1)}"; 
       echo "else{window.location.href='xqs_cart.php'}"; 
       echo "</script>"; 
          exit(); 
         } 
        } 
       } 
       
       $cur_cart_array[$max_array_keyid][] = $goods_id; 
       $cur_cart_array[$max_array_keyid][] = $goods_num; 
       
       setcookie("shop_cart_info",serialize($cur_cart_array)); 
         
      } 
      
       } 
      
    //从购物车删除 
     function delcart($goods_array_id){ 
      
     $cur_goods_array = unserialize(stripslashes($_COOKIE['shop_cart_info'])); 
      
     //删除该商品在数组中的位置 
      unset($cur_goods_array[$goods_array_id]); 
      setcookie("shop_cart_info",serialize($cur_goods_array)); 
      

      
     //修改购物车货品数量 
     function update_cart($up_id,$up_num,$goods_ids){ 
      
      //先清空cookie,以便重新设置,传递过来三个数组参数 1数组的标识 2商品数量数组 3商品编号数组 
      //如果不清空cookie则无法处理数量为零的商品 
      setcookie("shop_cart_info",""); 
      foreach($up_id as $song){ 
      
       //先返回数组当前单元;再把指针向下移动一个位置 
       $goods_nums = current($up_num); 
       $goods_id = current($goods_ids); 
       next($up_num); 
       next($goods_ids); 
       
       //当商品数量为空的时候,注销此处的数组值并用continue 2 语句避开下面的操作,继续做foreach循环 
       while($goods_nums == 0){ 
        unset($song); 
        continue 2; 
       } 
       
       $cur_goods_array[$song][0] = $goods_id; 
       $cur_goods_array[$song][1] = $goods_nums; 
       
      } 
      
      setcookie("shop_cart_info",serialize($cur_goods_array)); 
      
     } 
    后面形成订单的事情,那就需要根据自己的需要,是否有积分,是否有现金奖励之类的入库了
      

  3.   

    例子 1. setcookie() 发送例子$value = 'something from somewhere';setcookie("TestCookie", $value);
    setcookie("TestCookie", $value,time()+3600);  /* expire in 1 hour */
    setcookie("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);  
    注意 cookie 中值的部分在发送的时候会被自动用 urlencode 编码并在接收到的时候被自动解码并把值赋给与自己同名的 cookie 变量。如果不想这样并且在使用 PHP 5 的话,可以用 setrawcookie() 来代替。下面这个简单的例子可以得到刚才所设定的 cookie 的值: <?php
    // 输出单独的 cookie
    echo $_COOKIE["TestCookie"];
    echo $HTTP_COOKIE_VARS["TestCookie"];// 另一个调试的方法就是输出所有的 cookie
    print_r($_COOKIE);
    ?>  要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。下面的例子说明了如何删除刚才设置的 cookie: 例子 2. setcookie() 删除例子// 将过期时间设为一小时前
    setcookie("TestCookie", "", time() - 3600);
    setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);  
     
    也可以通过在 cookie 名称中使用数组符号来设定数组 cookie,可以设定多个 cookie 作为数组单元,在脚本提取 cookie 时所有的值都放在一个数组种: 例子 3. setcookie() 中使用数组的例子<?php
    // 设定 cookie
    setcookie("cookie[three]", "cookiethree");
    setcookie("cookie[two]", "cookietwo");
    setcookie("cookie[one]", "cookieone");// 刷新页面后,显示出来
    if (isset($_COOKIE['cookie'])) {
        foreach ($_COOKIE['cookie'] as $name => $value) {
            echo "$name : $value <br />\n";
        }
    }
    ?>  上例将输出:three : cookiethree
    two : cookietwo
    one : cookieone
     
     
    注: 下面的一些 RFC 也具参考价值:RFC 2109 和 RFC 2695。 注意 expire 参数的接受的是 Unix 时间戳,而不是日期格式 Wdy, DD-Mon-YYYY HH:MM:SS GMT,这是因为 PHP 在内部进行了转换。 expire 是与客户端的时间相比较,和服务器时间可能不同。 注: 向 Microsoft Internet Explorer 4 Service Pack 1 不能正确处理设定了 path 的 cookie。 Netscape Communicator 4.05 及 Microsoft Internet Explorer 3.x 不能正确处理没有设定 path 和 time 的 cookie。
      

  4.   

    建议自己写个函数封装一下~
    同时给浏览器 setcookie 也把值写到 $_COOKIE 全局变量里去, 这样子比较不容易出问题, 主要针对一些 ajax 无刷新的页面~
      

  5.   

    cookie 有一个 httponly 属性HttpOnly 防范XSS来获取 cookies信息的分析,利用httponly提升应用程序安全性setcookie("abc",    "test",    NULL,    NULL,    NULL,    NULL,    TRUE);