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


Posted in PHP onDecember 10, 2014

本文实例讲述了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,'/'); 

            } 

        } 

    }/*}}}*/ 

}/*}}}*/

不多解释了,这个别人用的不多,昨天因为需要写的,留一下吧,也许以后还用得到,调用的代码很简单,代码如下:
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程序设计有所帮助。

PHP 相关文章推荐
ADODB的数据库封包程序库
Dec 31 PHP
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
PHP对文件进行加锁、解锁实例
Jan 23 PHP
PHP简单选择排序算法实例
Jan 26 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
PHP正则表达式入门教程(推荐)
May 18 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
php实现小程序支付完整版
Oct 09 PHP
php利用cookie实现自动登录的方法
Dec 10 #PHP
PHP使用header()输出图片缓存实例
Dec 09 #PHP
PHP实现服务器状态监控的方法
Dec 09 #PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 #PHP
php实现MySQL数据库备份与还原类实例
Dec 09 #PHP
两个php日期控制类实例
Dec 09 #PHP
php中Ctype函数用法详解
Dec 09 #PHP
You might like
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
python文件和目录操作函数小结
2014/07/11 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
python实现感知器算法(批处理)
2019/01/18 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
python 读取修改pcap包的例子
2019/07/23 Python
为什么说python适合写爬虫
2020/06/11 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
仓库主管岗位职责
2014/03/02 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
mysql脏页是什么
2021/07/26 MySQL
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
Redis实战高并发之扣减库存项目
2022/04/14 Redis