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 相关文章推荐
header()函数使用说明
Nov 23 PHP
php动态生成JavaScript代码
Mar 09 PHP
php+mysql事务rollback&commit示例
Feb 08 PHP
php中执行系统命令的方法
Mar 21 PHP
PHP通过API获取手机号码归属地
May 28 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
Jul 01 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
PHP网站建设的流程与步骤分享
Sep 25 PHP
Symfony的安装和配置方法
Mar 17 PHP
PHP 实现公历日期与农历日期的互转换
Sep 13 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 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
Home Coffee Roasting
2021/03/03 咖啡文化
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
Python兔子毒药问题实例分析
2015/03/05 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
Python中turtle库的使用实例
2019/09/09 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
2020/06/22 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
Python 解析xml文件的示例
2020/09/29 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
幼儿园社区活动总结
2014/07/07 职场文书
学校工作推荐信范文
2014/07/11 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js
java实现web实时消息推送的七种方案
2022/07/23 Java/Android