好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php cookie操作之队列操作类

文章从最简单的cookie操作(增加,删除,修改)到我们的cookie队列操作类的操作,有需要了解的同学可以参考本实例.

1、设置Cookie

1. PHP 的COOKIE

cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。 

PHP 在http 协议的头信息里发送cookie,因此 setcookie() 函数必须在其它信息被输出到浏览器前调用,这和对  header() 函数的限制类似.

1.1 设置cookie:

可以用 setcookie()或 setrawcookie()函数来设置 cookie,也可以通过向客户端直接发送http  头来设置.

1.1.1 使用 setcookie()函数设置cookie:

bool setcookie ( string name [, string value [,int expire [,string path [,string domain [,bool secure [,bool httponly]]]]]] ) 

name: cookie 变量名

value: cookie 变量的值

expire: 有效期结束的时间

path: 有效目录

domain: 有效域名,顶级域唯一

secure: 如果值为 1,则cookie 只能在https 连接上有效,如果为默认值 0,则http 和 https 都可以.

来看几个例子,简单的:SetCookie("MyCookie", "Value of MyCookie");

带失效时间的.代码如下:

SetCookie("WithExpire", "Expire in 1 hour", time()+3600);//3600秒=1小时

什么都有的,代码如下:

SetCookie("FullCookie", "Full cookie value", time()+3600, "/forum", ".phpuser.com", 1);

我们需要用到队列,代码如下:

class  QueueSvc  { /*{{{*/        private   $length ;  // 队列的长度        private   $server_arr ;             public   function  __construct( $length , $server_arr )      {           $this ->length =  $length ;           $this ->server_arr =  $server_arr ;      }             public   function  getServerArr()      {           return   $this ->server_arr;      }             public   function  set( $server_name )      {          self::push( $server_name );      }             private   function  push( $server_name )      {           //有重复的记录,把重复的删掉            if (self::isServerExist( $server_name )){              self::removeRepeat( $server_name );          } else {               if (self::isFull()){                   //如果已经满了,要把队列最后一个记录删掉                    array_pop ( $this ->server_arr);              }          }           //如果队列为空,先置为空数组            if ( empty empty ( $this ->server_arr))               $this ->server_arr =  array ();           //向队列头添加数据             array_unshift ( $this ->server_arr, $server_name );        }             private   function  isFull()      {           if ( is_array ( $this ->server_arr) && ( count ( $this ->server_arr) >=  $this ->length))               return  true;           return  false;       }             private   function  isServerExist( $server_name )      {           if ( is_array ( $this ->server_arr) && in_array( $server_name , $this ->server_arr))               return  true;           return  false;      }             private   function  removeRepeat( $server_name )      {           if ( is_array ( $this ->server_arr) && in_array( $server_name , $this ->server_arr))          {               foreach ( $this ->server_arr  as   $key => $value )              {                   if ( $server_name  ==  $value )                  {                       $this ->array_remove( $this ->server_arr, $key );                  }              }             }      }             private   function  array_remove(& $arr ,  $offset ) {                array_splice  (  $arr ,  $offset , 1 );       }  } /*}}}*/ require_once ( 'queue_svc.php' );  class  CookieSvc  { /*{{{*/        const    COOKIE_KEY =  "GAME_SERVER" ;             const    SEPARATE   =  "|" ;         const    COOKIE_LENGTH =  "2" ;             public   function  getCookieArr()      { /*{{{*/            $server_str  =   $_COOKIE [self::COOKIE_KEY];           $server_str  =   $_COOKIE [ 'GAME_SERVER' ];           if ( $server_str  ==  '' ){               $result  =   array ();          } else {               $result  =  explode (self::SEPARATE, $server_str );          }           return   $result ;      } /*}}}*/              public   function  set( $cookie_id )      { /*{{{*/            $server_arr  = self::getCookieArr();           if ( $cookie_id  != false)          { //开源代码phpfensi.com                $que  =  new  QueueSvc(self::COOKIE_LENGTH, $server_arr );               $que ->set( $cookie_id );               $server_new  =  $que ->getServerArr();               if ( is_array ( $server_new ))              {                   $cookie_str  = implode(self::SEPARATE, $server_new );                  setcookie(self::COOKIE_KEY, $cookie_str ,time()+3600, '/' );              }          }      } /*}}}*/   } /*}}}*/  

不多解释了,这个别人用的不多,昨天因为需要写的,留一下吧,也许以后还用得到,调用的代码很简单,代码如下:

require_once ( "queue_svc.php" );    require_once ( "cookie_svc.php" );    $cookie_id  =  '4' ;    CookieSvc::set( $cookie_id ); 

这样就可以了,大家可以每次把$cookie_id换做不同的值,来检验此操作,检验的代码可以用如下代码:

var_dump($_COOKIE);

常见问题解决:

1) 用 setcookie()时有错误提示,可能是因为调用setcookie()前面有输出或空格。也可能你的文档是从其他字符集转换过来,文档后面可能带有 BOM 签名(就是在文件内容添加一些隐藏的BOM 字符),解决的办法就是使你的文档不出现这种情况,还有通过使用ob_start()函数也能处理一点.

2) $_COOKIE 受magic_quotes_gpc 影响,可能自动转义.

3) 使用的时候,有必要测试用户是否支持cookie.

 

查看更多关于php cookie操作之队列操作类的详细内容...

  阅读:47次