• 技术文章 >php教程 >php手册

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

    2016-06-06 20:15:57原创457

    这篇文章主要介绍了php针对cookie操作的队列操作类,以实例形式分析了设置cookie的常见方法,以及队列操作cookie的方法,最后给出了针对常见问题的总结,需要的朋友

    本文实例讲述了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
    {/*{{{*/
    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(emptyempty($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)
    {
    $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,'//m.sbmmt.com/m/');
    }
    }
    }/*}}}*/
    }/*}}}*/


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

    复制代码 代码如下:

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php cookie 操作 队列
    上一篇:php图片的二进制转换实现方法 下一篇:php实现高效获取图片尺寸的方法
    Web大前端开发直播班

    相关文章推荐

    • php判断当前用户已在别处登录的方法,当前用户在别处• PHP中PDO_MYSQL扩展安装的2种方法• php的数据数据类型• Codeigniter的一些优秀实践• 关于本地计算机无法启动Apache2,计算机启动Apache2
    1/1

    PHP中文网