php强制cookies,php Cookies操作类(附源码)

本cookies操作类的功能,包括:

1,保存,读取,更新,清除cookies数据。

2,可设置前缀。

3,强制超时控制。

4,cookies数据可以是字符串,数组,对象等。

1,PHP cookies操作类 Cookies.class.php

复制代码 代码示例:

/** Cookies class 保存,读取,更新,清除cookies数据。可设置前缀。强制超时。数据可以是字符串,数组,对象等。

*   Date:   2013-12-22

*   Author: fdipzone

*   Ver:    1.0

*   Edit: www.jbxue.com

*   Func:

*   public   set        设置cookie

*   public   get        读取cookie

*   public   update     更新cookie

*   public   clear      清除cookie

*   public   setPrefix  设置前缀

*   public   setExpire  设置过期时间

*   private  authcode   加密/解密

*   private  pack       将数据打包

*   private  unpack     将数据解包

*   private  getName    获取cookie name,增加prefix处理

*/

class Cookies{ // class start

private $_prefix = '';                                                  // cookie prefix

private $_securekey = 'ekOt4_Ut0f3XE-fJcpBvRFrg506jpcuJeixezgPNyALm';   // encrypt key

private $_expire = 3600;                                                // default expire

/** 初始化

* @param String $prefix     cookie prefix

* @param int    $expire     过期时间

* @param String $securekey  cookie secure key

*/

public function __construct($prefix='', $expire=0, $securekey=''){

if(is_string($prefix) && $prefix!=''){

$this->_prefix = $prefix;

}

if(is_numeric($expire) && $expire>0){

$this->_expire = $expire;

}

if(is_string($securekey) && $securekey!=''){

$this->_securekey = $securekey;

}

}

/** 设置cookie

* @param String $name   cookie name

* @param mixed  $value  cookie value 可以是字符串,数组,对象等

* @param int    $expire 过期时间

*/

public function set($name, $value, $expire=0){

$cookie_name = $this->getName($name);

$cookie_expire = time() + ($expire? $expire : $this->_expire);

$cookie_value = $this->pack($value, $cookie_expire);

$cookie_value = $this->authcode($cookie_value, 'ENCODE', $this->_securekey);

if($cookie_name && $cookie_value && $cookie_expire){

setcookie($cookie_name, $cookie_value, $cookie_expire);

}

}

/** 读取cookie

* @param  String $name   cookie name

* @return mixed          cookie value

*/

public function get($name){

$cookie_name = $this->getName($name);

if(isset($_COOKIE[$cookie_name])){

$cookie_value = $this->authcode($_COOKIE[$cookie_name], 'DECODE', $this->_securekey);

$cookie_value = $this->unpack($cookie_value);

return isset($cookie_value[0])? $cookie_value[0] : null;

}else{

return null;

}

}

/** 更新cookie,只更新内容,如需要更新过期时间请使用set方法

* @param  String $name   cookie name

* @param  mixed  $value  cookie value

* @return boolean

*/

public function update($name, $value){

$cookie_name = $this->getName($name);

if(isset($_COOKIE[$cookie_name])){

$old_cookie_value = $this->authcode($_COOKIE[$cookie_name], 'DECODE', $this->_securekey);

$old_cookie_value = $this->unpack($old_cookie_value);

if(isset($old_cookie_value[1]) && $old_cookie_vlaue[1]>0){ // 获取之前的过期时间

$cookie_expire = $old_cookie_value[1];

// 更新数据

$cookie_value = $this->pack($value, $cookie_expire);

$cookie_value = $this->authcode($cookie_value, 'ENCODE', $this->_securekey);

if($cookie_name && $cookie_value && $cookie_expire){

setcookie($cookie_name, $cookie_value, $cookie_expire);

return true;

}

}

}

return false;

}

/** 清除cookie

* @param  String $name   cookie name

*/

public function clear($name){

$cookie_name = $this->getName($name);

setcookie($cookie_name);

}

/** 设置前缀

* @param String $prefix cookie prefix

*/

public function setPrefix($prefix){

if(is_string($prefix) && $prefix!=''){

$this->_prefix = $prefix;

}

}

/** 设置过期时间

* @param int $expire cookie expire

*/

public function setExpire($expire){

if(is_numeric($expire) && $expire>0){

$this->_expire = $expire;

}

}

/** 获取cookie name

* @param  String $name

* @return String

*/

private function getName($name){

return $this->_prefix? $this->_prefix.'_'.$name : $name;

}

/** pack

* @param  Mixed  $data      数据

* @param  int    $expire    过期时间 用于判断

* @return

*/

private function pack($data, $expire){

if($data===''){

return '';

}

$cookie_data = array();

$cookie_data['value'] = $data;

$cookie_data['expire'] = $expire;

return json_encode($cookie_data);

}

/** unpack

* @param  Mixed  $data 数据

* @return              array(数据,过期时间)

*/

private function unpack($data){

if($data===''){

return array('', 0);

}

$cookie_data = json_decode($data, true);

if(isset($cookie_data['value']) && isset($cookie_data['expire'])){

if(time()

return array($cookie_data['value'], $cookie_data['expire']);

}

}

return array('', 0);

}

/** 加密/解密数据

* @param  String $str       原文或密文

* @param  String $operation ENCODE or DECODE

* @return String            根据设置返回明文活密文

*/

private function authcode($string, $operation = 'DECODE'){

$ckey_length = 4;   // 随机密钥长度 取值 0-32;

$key = $this->_securekey;

$key = md5($key);

$keya = md5(substr($key, 0, 16));

$keyb = md5(substr($key, 16, 16));

$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

$cryptkey = $keya.md5($keya.$keyc);

$key_length = strlen($cryptkey);

$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', 0).substr(md5($string.$keyb), 0, 16).$string;

$string_length = strlen($string);

$result = '';

$box = range(0, 255);

$rndkey = array();

for($i = 0; $i <= 255; $i++) {

$rndkey[$i] = ord($cryptkey[$i % $key_length]);

}

for($j = $i = 0; $i < 256; $i++) {

$j = ($j + $box[$i] + $rndkey[$i]) % 256;

$tmp = $box[$i];

$box[$i] = $box[$j];

$box[$j] = $tmp;

}

for($a = $j = $i = 0; $i < $string_length; $i++) {

$a = ($a + 1) % 256;

$j = ($j + $box[$a]) % 256;

$tmp = $box[$a];

$box[$a] = $box[$j];

$box[$j] = $tmp;

$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));

}

if($operation == 'DECODE') {

if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {

return substr($result, 26);

} else {

return '';

}

} else {

return $keyc.str_replace('=', '', base64_encode($result));

}

}

} // class end

?>

2,演示示例 demo.php

复制代码 代码示例:

require 'Cookies.class.php';

$type = isset($_GET['type'])? strtolower($_GET['type']) : '';

if(!in_array($type, array('set','get','update','clear'))){

exit('type not exists');

}

$obj = new Cookies('member', 10); // obj

switch($type){

case 'set': // 设置

$data = array(

'name' => 'fdipzone',

'gender' => 'male'

);

$obj->set('me', $data, 5);

echo 'set cookies';

break;

case 'get': // 读取

$result = $obj->get('me');

echo '

';

print_r($result);

echo '

';

echo 'get cookies';

break;

case 'update': // 更新

$data = array(

'name' => 'angelababy',

'gender' => 'female'

);

$flag = $obj->update('me', $data);

if($flag){

echo 'update cookies success';

}else{

echo 'update cookies false';

}

break;

case 'clear': // 清除

$obj->clear('me');

echo 'clear cookies';

break;

}

?>

附,PHP Cookies操作类的源码下载地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 缩略图 失真,WORDPRESS缩略图失真变形模糊的解决方法

众所周知&#xff0c;网站最怕改版&#xff0c;其中一个主要的原因就是缩略图的问题&#xff0c;旧模板的缩略图尺寸不一定适合新版的模板缩略图尺寸要求&#xff0c;尽管后台的设置-多媒体-缩略图尺寸修改了&#xff0c;可这是新上传的图片才会生成新的尺寸的缩略图&#xff0…

php表单 提交数据,PHP表单提交数据

1.PHP表单处理PHP 超全局变量 $_GET 和 $_POST 用于收集表单数据GET 和 POST 都创建数组(例如&#xff0c;array( key > value, key2 > value2, key3 > value3, ...))。此数组包含键/值对&#xff0c;其中的键是表单控件的名称&#xff0c;而值是来自用户的输入数据。…

binarysearch java,java数据结构之二分查找法 binarySearch的实例

java数据结构之二分查找法 binarySearch的实例折半查找法&#xff0c;前提是已经排好序的数组才可查找实例代码&#xff1a;public class BinarySearch {int[] bArr;public void setArr(int[] bArr){this.bArrbArr;}public static void main(String[] args) {int arrLength16;i…

matlab dotline,基于模糊控制的路径规划算法的仿真实现---Matlab程序.rar

【实例简介】与 本人博客中的课程论文《基于模糊控制的路径规划算法的仿真实现》相配套&#xff0c;可以相互参阅【实例截图】【核心代码】基于模糊控制的路径规划算法的仿真实现---Matlab程序├── fuzzy4│ ├── CheckIsBlocked.asv│ ├── CheckIsBlocked.m│ ├…

php重定义地址栏url,thinkphp框架实现路由重定义简化url访问地址的方法分析

本文实例讲述了thinkphp框架实现路由重定义简化url访问地址的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;如果按照正常访问的话&#xff0c;则需要输入一长串的url地址&#xff0c;这样会显得十分冗长&#xff0c;我可以可以通过对路由规则的重新定义简化url访…

php 数组 json字段去不全,json_encode – PHP给出了不完整的json字符串

首先我的环境&#xff1a;PHP 5.3.2 – 使用Suoshin和xCache的lighttpd / 1.4.26我的代码太多了,不能在这里发布.我会说出来的.文件x.php正在加载一些PHP – Classe,初始化它们,执行一些函数 – >获取Result数组.如果我print_r这个数组我得到一个完整的结果.但是我使用json_…

java 判断季节,Java-用switch判断季节

import java.util.*;class Demo3{public static void main(String[] args){//需求 &#xff1a;输入一个月份 &#xff0c;判断月份属于哪一个季节 &#xff1a;春天:3,4,5//夏天 &#xff1a;6&#xff0c;7&#xff0c;8 &#xff0c;秋天:9,10,11 冬天&#xff1a;12&#x…

matlab jp2格式,JP2文件扩展名_JP2是什么格式_JP2文件怎么打开-文件百科

JPEG 2000标准是由联合图像专家组(JPEG)委员会在1990年代后期开发的&#xff0c;以代替1992年发布的JPEG标准。它对JPEG格式进行了一些改进&#xff0c;采用小波压缩算法&#xff0c;不会产生原先的基于离散余弦变换的JPEG标准产生的块状模糊瑕疵。JPEG 2000使用小波变换、画布…

PPT下载下来是php,用php下载jpg,doc,ppt文件已损坏

我试图用php下载一些文件来隐藏文件路径&#xff0c;但是一些文件类型总是被破坏。像PDF和MP3文件类型很好。像doc&#xff0c;PPT&#xff0c;JPG等文件类型总是下载破碎。我使用这些mimetypesif (file_exists($file_real)){$extension strtolower(substr(strrchr($file, &qu…

php安装文档,PHP - Manual: 安装 (官方文档)

安装安装此 PECL 扩展相关的信息可在手册中标题为PECL扩展的安装章节中找到。更多信息如新的发行版本、下载、源文件、维护人员信息及变更日志等&#xff0c;都在此处&#xff1a; https://pecl.php.net/package/cairo.PECL 扩展的DLL 当前不可用。参见在 Windows 上构建章节。…

php mail laravel,邮件 - Laravel - 为 WEB 艺术家创造的 PHP 框架。

邮件配置Laravel的邮件功能构建于流行的SwiftMailer库之上&#xff0c;并提供了简介、高效的API。邮件配置信息在app/config/mail.php文件中&#xff0c;并提供了包含SMTP主机、端口和证书的配置选项&#xff0c;也可以为发送的邮件配置一个全局from(来自)地址。你可以使用任何…

php抓取带帐号密码,PHP实现抓取迅雷VIP账号的方法_PHP

本文实例讲述了PHP实现抓取迅雷VIP账号的方法。分享给大家供大家参考。具体如下&#xff1a;看了Jinn_Wei Python版本的抓取账号&#xff0c;于是顺手写了个PHP版本PS1&#xff1a;代码没经过优化&#xff0c;只实现了基本的功能PS2&#xff1a;代码中使用了SnoopyPS3&#xff…

php输入安全验证漏洞,PHP 输入验证错误漏洞

来源:MLIST链接:https:/3 N x 6/lists.deC w c F K Y x bian.org/debian-lts-announce/2020/10/msg00008.html来源:MISC链接:http://cS | / O ?ve.circl.lu/cve/CH P / 3VE-2020-8184来源:MISC链接:https:/? 2 ( 4/bugs.php.net/buX / d 2 # } Lg.php?id79699来源:FEDORA链…

oracle 主键约束重名,主键及主键索引的关系及相互影响

主键的定义&#xff1a;列或多列的集合&#xff0c;用于唯一的标识表中的一行。一个表上只允许有一个主键。我们在数据库中指定主键时&#xff0c;是通过主键约束来定义的。而创建主键约束时&#xff0c;又是需要有相应的索引来配合实现的。所以&#xff0c;本文的目的是总结创…

oracle数据库密码复杂度查询,Oracle11g R2创建PASSWORD_VERIFY_FUNCTION对应密码复杂度验证函数步骤...

1、连接上Linux数据库服务器&#xff0c;切换到Oracle数据库用户桌面&#xff0c;打开终端&#xff0c;进入到环境变量$ORACLE_HOME目录Last login: Fri Dec 11 13:26:18 2015 from 192.168.1.100[rootLinux主机名 ~]# su - oracle[oracleLinux主机名 dbhome_1]$ cd $ORACLE_HO…

oracle加大内存对大表,在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能...

在ORACLE里如果遇到特别大的表&#xff0c;可以使用分区的表来改变其应用程序的性能。以system身份登陆数据库&#xff0c;查看 v$option视图&#xff0c;如果其中Partition为TRUE&#xff0c;则支持分区功能&#xff1b;否则不支持。Partition有基于范围、哈希、综和三种类型。…

php ci框架 模板引擎,详解CodeIgniter框架实现的整合Smarty引擎DEMO

CodeIgniter框架实现的整合Smarty引擎DEMO示例本文实例讲述了CodeIgniter框架实现的整合Smarty引擎。分享给大家供大家参考&#xff0c;具体如下&#xff1a;Smarty的模板机制很强大&#xff0c;一般情况下CI框架无需整合其他模板标签&#xff0c;因为PHP本身就是一种标签&…

padodb time.inc.php,怎样实现PHP中ADODB事务处理

这次给大家带来怎样实现PHP中ADODB事务处理&#xff0c;实现PHP中ADODB事务处理的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。一、代码adodb.inc.php可从官方网站http://adodb.sourceforge.net/ 下载。或者点击此处本站下载。conn.php&#xff1a;&…

oracle清空无效数据,如何清除编译后留下的无效对象

在使用utlrp.sql编译后&#xff0c;查看发现还有一些invalid的object&#xff1b;请教这些invalid如何清除&#xff1f;多谢&#xff01;SYSprimary>select object_name,object_type,owner from dba_objects where status not in (VALID);OBJECT_NAME OB…

linux隐藏特定进程,linux 隐藏进程

2、源码如下rootubuntu:/var/srt/libprocesshider# cat processhider.c#define _GNU_SOURCE#include #include #include #include #include /** Every process with this name will be excluded*/static const char* process_to_filter "srt";/** Get a directory n…