function cookieKeyword( $word = "", $i = 5 ){
  if( ! trim( $word ) ) return 0;
  if( ! isset( $_COOKIE["c_keyword"] ) ) 
    $_COOKIE["c_keyword"][] = $word;
  else {
    if( count($_COOKIE["c_keyword"]) >= $i ) {
      ksort($_COOKIE["c_keyword"]);
      array_shift( $_COOKIE["c_keyword"] );
    }
    $_COOKIE["c_keyword"][] = $word;
  }
}

解决方案 »

  1.   

    可能我说得不够清楚,应该是可以保存多次录入的值。举例:
    第一次录入:北京、上海、天津
    第二次录入:海南、广州、武汉
    此时$_COOKIE中的值应该是:
      武汉、上海、天津、海南、广州。武汉替换第一个录入的北京。
    第三次录入:成都、昆明
    此时$_COOKIE中的值应该是:
      武汉、成都、昆明、海南、广州
      

  2.   

    另外,这些COOKIE值需要进行长期保存。
      

  3.   

    COOKIE是客户端保存的
    要看浏览器设置
    有些不允许保存COOKIE
      

  4.   

    方法我已经告诉你了。。
    多个关键词你只要多次运行我提供的函数就OK了。
    我写出的函数支持多次录入的,参数$word表示关键字,$i表示保留关键词的个数。
      

  5.   

    不知道是怎么回事,我测试并用过其它很多方法,重新录入时都会将之前已有的cookie值替换掉。
      

  6.   

    cookie有先天限制。最多20个。每个最大4k。而且还要受apache的header大小限制(一般全部header加起来不能超过8k)
      

  7.   

    非常感谢楼上的几位,我自己写了一个。
    <?php
    $cookie_time = time()+3600*24*365;
    $tags = array('上海','北京','天津','南京','武汉','广州');$t_str = implode(",", $tags);
    last_cookies($t_str,5,'tags',$cookie_time);                    /**
            * 保存最近录入的字符到cookie
            *
            * @param      参数
              $c_value          录入的字串,多个字串间用','号分割;
              $c_num          cookie中最多保存值的个数;
              $c_name          cookie值所定义的名称;
              $c_time          cookie生效时间;
            * @access     权限
            * @return     返回值
            */        function last_cookies($c_value,$c_num,$c_name,$c_time){
                    //setcookie($c_name, $c_value, $c_time);
                    //取出字串成为数组;
                    if(!isset($_COOKIE[$c_name])){
                            $c_arr = explode(",", $c_value);
                            if(count($c_arr)>$c_num){ //超过限定数,则砍去
                                    $n = count($c_arr)-$c_num;
                                    for($i=0;$i<$n;$i++){
                                            array_shift($c_arr);
                                    }
                            }                }else{
                            $get_cookie = $_COOKIE[$c_name];//取出cookie中的历史记录;
                            
                            $last_arr = explode(",", $get_cookie);
                            $c_arr = explode(",", $c_value);
                            
                            foreach($c_arr as $v){
                                    array_push($last_arr,$v); //依次push
                            }
                            //移除重复
                            $c_arr = array_unique($last_arr);
                            if(count($c_arr)>$c_num){ //超过限定数,则砍去
                                    $n = count($c_arr)-$c_num;
                                    for($i=0;$i<$n;$i++){
                                            array_shift($c_arr);
                                    }
                            }                }
                    
                    $c_str = implode(",", $c_arr);
                    setcookie($c_name, $c_str, $c_time);
            }

    ?>
      

  8.   

    好像越搞越复杂了吧。。看看下面的是不是更好?<?php
    $cookie_time = time()+3600*24*365;
    $tags = array('上海','北京','天津','南京','武汉','广州');//新输入的关键词
    $cookie_array = isset($_COOKIE["c_keyword"]) ? $_COOKIE["c_keyword"] : array();//COOKIE中保存的是数组$result = array_merge( $tags, $cookie_array );
    while( count( $result ) > 5 ) {
      array_pop( $result );//将数组最后一个单元弹出
    }
    setcookie( "c_keyword", $result, $cookie_time );
    ?>
      

  9.   

    晕西,原来COOKIE不能用数组,再改下。$cookie_time = time()+3600*24*365;
    $tags = array('广州','上海','北京','天津','南京','武汉');//新输入的关键词
    $cookie_array = isset($_COOKIE["c_keyword"]) ? explode( ",", $_COOKIE["c_keyword"] ) : array();//COOKIE中保存的是数组$result = array_merge( $tags, $cookie_array );
    while( count( $result ) > 5 ) {
      array_pop( $result );//将数组最后一个单元弹出
    }
    setcookie( "c_keyword", implode(",", $result), $cookie_time );
    print_r($_COOKIE["c_keyword"]);