ホームページ  >  記事  >  バックエンド開発  >  php Cookies操作クラス(ソースコード付き)

php Cookies操作クラス(ソースコード付き)

WBOY
WBOYオリジナル
2016-07-25 08:55:241384ブラウズ
  1. /** Cookies クラス Cookie データを保存、読み取り、更新、クリアします。プレフィックスを設定できます。強制タイムアウト。データは文字列、配列、オブジェクトなどです。
  2. * 日付: 2013-12-22
  3. * 著者: fdipzone
  4. * バージョン: 1.0
  5. * 編集: bbs.it-home.org
  6. * Func:
  7. * public set Cookie の設定
  8. * public get Cookie の読み取り
  9. * public update Cookie の更新
  10. * public clear Cookie のクリア
  11. * public setPrefix プレフィックスの設定
  12. * public setExpire 有効期限の設定
  13. * private authcode 暗号化/復号化
  14. * private パックパックデータ
  15. * private unpack アンパックデータ
  16. * private getName Cookie 名を取得、プレフィックスを追加処理
  17. */
  18. class Cookies{ // クラス開始
  19. private $_prefix = ''; // Cookie プレフィックス
  20. private $_securekey = 'ekOt4_Ut0f3XE-fJcpBvRFrg506jpcuJeixezgPNyALm' // 暗号化キー
  21. private $_expire = 3600 ; // デフォルト期限切れ
  22. /**初期化
  23. * @param String $prefix クッキープレフィックス
  24. * @param int $expire 有効期限
  25. * @param String $securekey クッキーセキュアキー
  26. */
  27. public function __construct($prefix='', $expire=0, $securekey=''){
  28. if(is_string($prefix) && $prefix !='' ){
  29. $this->_prefix = $prefix;
  30. }
  31. if(is_numeric($expire) && $expire>0){
  32. $this->_expire = $expire }
  33. if(is_string( $securekey) && $securekey!=''){
  34. $this->_securekey = $securekey; }
  35. }
  36. /**Cookie を設定します
  37. * @param String $name Cookie 名
  38. * @parammixed $value Cookie の値は文字列、配列、オブジェクトなどにすることができます
  39. * @param int $expire 有効期限
  40. */
  41. public function set($name, $ value, $expire =0){
  42. $cookie_name = $this->getName($name);
  43. $cookie_expire = time() + ($expire? $expire : $this->_expire);
  44. $cookie_value = $this- >pack($value, $cookie_expire);
  45. $cookie_value = $this->authcode($cookie_value, 'ENCODE', $this->_securekey)
  46. if($cookie_name && $cookie_value && $cookie_expire) {
  47. setcookie($cookie_name, $cookie_value, $cookie_expire);
  48. }
  49. }
  50. /**读取cookie
  51. * @param String $name Cookie名
  52. * @return 混合Cookie値
  53. */
  54. public function get($name){
  55. $cookie_name = $this-> ;getName($名前);
  56. if(isset($_COOKIE[$cookie_name])){
  57. $cookie_value = $this->authcode($_COOKIE[$cookie_name], 'DECODE', $this-> _securekey); $cookie_value = $this->unpack($cookie_value);
  58. return isset($cookie_value[0]) : null;
  59. return null; **Cookie を更新し、内容のみを更新します。有効期限を更新する必要がある場合は、set メソッドを使用してください
  60. * @param String $name Cookie 名
  61. * @parammixed $value Cookie 値
  62. * @return boolean
  63. */
  64. public function update($name, $value){
  65. $cookie_name = $this->getName($name);
  66. if(isset($_COOKIE[$cookie_name] )){
  67. $old_cookie_value = $this->authcode($_COOKIE[$cookie_name], 'DECODE', $this->_securekey);
  68. $old_cookie_value = $this->unpack($old_cookie_value);
  69. if(isset( $old_cookie_value[1]) && $old_cookie_vlaue[1]>0){ // 前回の有効期限を取得します
  70. $cookie_expire = $old_cookie_value[1]
  71. // データを更新します
  72. $cookie_value = $this-> Pack($value, $cookie_expire);
  73. $cookie_value = $this->authcode($cookie_value, 'ENCODE', $this->_securekey)
  74. if($cookie_name && $cookie_value && $ cookie_expire); setcookie($cookie_name, $cookie_value, $cookie_expire);
  75. return true;
  76. }
  77. }
  78. }
  79. return false }
  80. /**清除cookie
  81. * @param String $name クッキー名
  82. */
  83. public function clear($name) {
  84. $cookie_name = $this->getName($name);
  85. setcookie($cookie_name);
  86. }
  87. /**プレフィックスを設定します
  88. * @param String $prefix クッキープレフィックス
  89. */
  90. public function setPrefix($prefix){
  91. if(is_string($ prefix) && $ prefix!=''){
  92. $this->_prefix = $prefix;
  93. }
  94. }
  95. /**有効期限を設定します
  96. * @param int $expire Cookie の有効期限が切れます
  97. */
  98. public function setExpire($expire){
  99. if(is_numeric($expire) && $expire>0){
  100. $this->expire = $expire;
  101. }
  102. }
  103. /**获取Cookie名
  104. * @param String $name
  105. * @return String
  106. */
  107. private function getName($name){
  108. return $this->_prefix? $this->_prefix.'_'.$name : $name;
  109. }
  110. /**Pack
  111. * @param 混合 $data データ
  112. * @param int $expire 判定に使用される有効期限
  113. * @return
  114. */
  115. プライベート関数pack($data, $expire){
  116. if($data===''){
  117. return ''; $cookie_data = array();
  118. $cookie_data['value'] = $data;
  119. $cookie_data['expire'] = $expire;
  120. return json_encode($cookie_data);
  121. }
  122. /**unpack
  123. * @param 混合 $data データ
  124. * @return array(データ、有効期限)
  125. */
  126. プライベート関数 unpack($data){
  127. if($data===''){
  128. return array('', 0);
  129. }
  130. $cookie_data = json_decode($data, true);
  131. if(isset($cookie_data['value']) && isset($cookie_data['expire'])){
  132. if(time()<$ cookie_data['expire']){ // 未使用
  133. return array($cookie_data['value'], $cookie_data['expire']);
  134. }
  135. }
  136. return array('', 0);
  137. }
  138. /**データの暗号化/復号化
  139. * @param String $str 元のテキストまたは暗号文
  140. * @param String $operation ENCODE または DECODE
  141. * @return String 設定に従って平文または暗号文を返します
  142. */
  143. プライベート関数 authcode($string, $operation = 'DECODE'){
  144. $ckey_length = 4; // 随机密钥長度 取值 0-32;
  145. $key = $this->_securekey;
  146. $key = md5($key);
  147. $keya = md5(substr($key, 0, 16));
  148. $keyb = md5(substr($key, 16, 16));
  149. $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
  150. $cryptkey = $keya.md5($keya.$keyc);
  151. $key_length = strlen($cryptkey);
  152. $string = $operation == 'デコード' ? Base64_decode(substr($string, $ckey_length)) : sprintf('%010d', 0).substr(md5($string.$keyb), 0, 16).$string;
  153. $string_length = strlen($string);
  154. $result = '';
  155. $box = range(0, 255);
  156. $rndkey = array();
  157. for($i = 0; $i $rndkey[$i] = ord($cryptkey[$i % $key_length]);
  158. }
  159. for($j = $i = 0; $i $j = ($j + $box[$i] + $rndkey[$i]) % 256;
  160. $tmp = $box[$i];
  161. $box[$i] = $box[$j];
  162. $box[$j] = $tmp;
  163. }
  164. for($a = $j = $i = 0; $i < $string_length; $i++) {
  165. $a = ($a + 1) % 256;
  166. $j = ($j + $box[$a]) % 256;
  167. $tmp = $box[$a];
  168. $box[$a] = $box[$j];
  169. $box[$j] = $tmp;
  170. $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
  171. }
  172. if($operation == 'DECODE') {
  173. if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
  174. return substr($result, 26);
  175. } else {
  176. return '';
  177. }
  178. } else {
  179. return $keyc.str_replace('=', '',base64_encode($result));
  180. }
  181. }
  182. } // 授業終了
  183. ?>
  184. 复制代

2、デモ例demo.php

  1. require 'Cookies.class.php';
  2. $type = isset($_GET['type'])? strto lower($_GET['type']) : '';
  3. if(!in_array($type, array('set','get','update','clear'))){
  4. exit('タイプが存在しません');
  5. }
  6. $obj = 新しい Cookies('メンバー', 10); // obj
  7. switch($type){
  8. case 'set': // 設定
  9. $data = array(
  10. 'name' => 'fdipzone',
  11. 'gender' => 'male'
  12. ) ;
  13. $obj->set('me', $data, 5);
  14. 「Cookie を設定」をエコーし​​ます。
  15. 休憩;
  16. case 'get': // 读取
  17. $result = $obj->get('me');
  18. echo '
    ';  </li>
    <li> print_r($result);  </li>
    <li> echo '
    ';
  19. echo 'Cookie を取得';
  20. 休憩;
  21. case 'update': // 更新
  22. $data = array(
  23. 'name' => 'angelababy',
  24. 'gender' => '女性'
  25. );
  26. $flag = $obj->update('me', $data);
  27. if($flag){
  28. echo 'Cookie の更新に成功しました';
  29. }else{
  30. echo 'update cookies false';
  31. }
  32. 休憩;
  33. case 'clear': // 清除
  34. $obj->clear('me');
  35. 「Cookie をクリア」をエコーし​​ます。
  36. 休憩;
  37. }
  38. ?>
复制代

附、PHP Cookies操作类的ソースコード下載地址



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。