热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这篇文章主要介绍了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,'/');
}
}
}/*}}}*/
}/*}}}*/


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

代码如下:

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程序设计有所帮助。

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文详细介绍了C语言中的格式化字符串类型,包括浮点数、十六进制数字、p-计数法、十进制整数、小数形式、实数、有符号整数和输出字符串等。对于每种类型,都给出了详细的解释和示例。通过本文的学习,读者将对C语言中的格式化字符串类型有更深入的理解。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Lodop中特殊符号打印设计和预览样式不同的问题解析
    本文主要解析了在Lodop中使用特殊符号打印设计和预览样式不同的问题。由于调用的本机ie引擎版本可能不同,导致在不同浏览器下样式解析不同。同时,未指定文字字体和样式设置也会导致打印设计和预览的差异。文章提出了通过指定具体字体和样式来解决问题的方法,并强调了以打印预览和虚拟打印机测试为准。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Microsoft Office for Mac最新版本安装教程,亲测可用!
    本文介绍了Microsoft Office for Mac最新版本的安装教程,经过亲测可用。Office工具是办公必备的工具,它为用户和企业设计,可以利用功能强大的Outlook处理电子邮件、日历和通讯录事宜。安装包包括Word、Excel、PPT、OneNote和Outlook。阅读本文可以了解如何下载并安装Office,以及安装过程中的注意事项。安装完毕后,可以正常使用Office中的Word等功能。 ... [详细]
author-avatar
李巍shelton
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有