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 相关文章推荐
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
php数据库密码的找回的步骤
Jan 12 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
ThinkPHP调用百度翻译类实现在线翻译
Jun 26 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
在php中设置session用memcache来存储的方法总结
Jan 14 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
php SQL之where语句生成器
2009/03/24 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
php简单图像创建入门实例
2015/06/10 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
python中的装饰器详解
2015/04/13 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
python开发之函数定义实例分析
2015/11/12 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
django配置app中的静态文件步骤
2020/03/27 Python
求网格中的黑点分布
2013/11/06 面试题
教育学专业实习生的自我鉴定
2013/11/26 职场文书
高中自我鉴定
2013/12/20 职场文书
大学毕业自我评价
2014/02/02 职场文书
工程质量承诺书范文
2014/03/27 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书