首页 > php框架 > php cookie操作之队列操作类

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", ".phprm.com", 1);

我们需要用到队列。

<?php
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($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, '/');
            }
        }
    }
}
?>

不多解释了,这个别人用的不多,昨天因为需要写的,留一下吧,也许以后还用得到。。

调用的代码很简单:

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


文章网址:http://www.phprm.com/frame/php1005289.html

随意转载^^但请附上教程地址。

标签:none

发表留言