日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

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

發(fā)布時(shí)間:2024/8/23 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php强制cookies,php Cookies操作类(附源码) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本cookies操作類(lèi)的功能,包括:

1,保存,讀取,更新,清除cookies數(shù)據(jù)。

2,可設(shè)置前綴。

3,強(qiáng)制超時(shí)控制。

4,cookies數(shù)據(jù)可以是字符串,數(shù)組,對(duì)象等。

1,PHP cookies操作類(lèi) Cookies.class.php

復(fù)制代碼 代碼示例:

/** Cookies class 保存,讀取,更新,清除cookies數(shù)據(jù)。可設(shè)置前綴。強(qiáng)制超時(shí)。數(shù)據(jù)可以是字符串,數(shù)組,對(duì)象等。

*?? Date:?? 2013-12-22

*?? Author: fdipzone

*?? Ver:??? 1.0

*?? Edit: www.jbxue.com

*?? Func:

*?? public?? set??????? 設(shè)置cookie

*?? public?? get??????? 讀取cookie

*?? public?? update???? 更新cookie

*?? public?? clear????? 清除cookie

*?? public?? setPrefix? 設(shè)置前綴

*?? public?? setExpire? 設(shè)置過(guò)期時(shí)間

*?? private? authcode?? 加密/解密

*?? private? pack?????? 將數(shù)據(jù)打包

*?? private? unpack???? 將數(shù)據(jù)解包

*?? 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???? 過(guò)期時(shí)間

* @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;

}

}

/** 設(shè)置cookie

* @param String $name?? cookie name

* @param mixed? $value? cookie value 可以是字符串,數(shù)組,對(duì)象等

* @param int??? $expire 過(guò)期時(shí)間

*/

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,只更新內(nèi)容,如需要更新過(guò)期時(shí)間請(qǐng)使用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){ // 獲取之前的過(guò)期時(shí)間

$cookie_expire = $old_cookie_value[1];

// 更新數(shù)據(jù)

$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);

}

/** 設(shè)置前綴

* @param String $prefix cookie prefix

*/

public function setPrefix($prefix){

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

$this->_prefix = $prefix;

}

}

/** 設(shè)置過(guò)期時(shí)間

* @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????? 數(shù)據(jù)

* @param? int??? $expire??? 過(guò)期時(shí)間 用于判斷

* @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 數(shù)據(jù)

* @return????????????? array(數(shù)據(jù),過(guò)期時(shí)間)

*/

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);

}

/** 加密/解密數(shù)據(jù)

* @param? String $str?????? 原文或密文

* @param? String $operation ENCODE or DECODE

* @return String??????????? 根據(jù)設(shè)置返回明文活密文

*/

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

$ckey_length = 4;?? // 隨機(jī)密鑰長(zhǎng)度 取值 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

復(fù)制代碼 代碼示例:

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': // 設(shè)置

$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操作類(lèi)的源碼下載地址

總結(jié)

以上是生活随笔為你收集整理的php强制cookies,php Cookies操作类(附源码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。