• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php针对cookie操作的队列操作类实例_PHP

php 搞代码 4年前 (2022-01-25) 14次浏览 已收录 0个评论

本文实例讲述了php针对cookie操作的队列操作类。分享给大家供大家参考。具体分析如下:

这里包括了从简单的cookie操作(增加,删除,修改)到我们的cookie队列操作类的操作,对此感兴趣的朋友可以参考一下。

一、PHP 的COOKIE

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

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

设置cookie:

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

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

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

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

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

var_dump($_COOKIE);

二、常见问题解决:

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

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

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

希望本文所述对大家的PHP程序设计有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php针对cookie操作的队列操作类实例_PHP

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址