> 백엔드 개발 > PHP 튜토리얼 > php 쿠키 작업 클래스(소스 코드 포함)

php 쿠키 작업 클래스(소스 코드 포함)

WBOY
풀어 주다: 2016-07-25 08:55:24
원래의
1391명이 탐색했습니다.
  1. /** 쿠키 클래스 쿠키 데이터를 저장하고, 읽고, 업데이트하고, 지웁니다. 접두사를 설정할 수 있습니다. 강제 시간 초과. 데이터는 문자열, 배열, 객체 등이 될 수 있습니다.
  2. * 날짜: 2013-12-22
  3. * 작성자: fdipzone
  4. * 버전: 1.0
  5. * 편집: bbs.it-home.org
  6. * 기능:
  7. * 공개 세트 쿠키 설정
  8. * 공개 get 쿠키 읽기
  9. * 공개 업데이트 쿠키 업데이트
  10. * 공개 지우기 쿠키 지우기
  11. * 공개 setPrefix 접두사 설정
  12. * 공개 setExpire 만료 시간 설정
  13. * 개인 인증 코드 암호화 /decryption
  14. * 개인 팩 팩 데이터
  15. * 개인 압축 풀기 데이터
  16. * 개인 getName 쿠키 이름 가져오기, 접두사 추가 처리
  17. */
  18. 클래스 쿠키{ / / 클래스 시작
  19. private $_prefix = ''; // 쿠키 접두사
  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. 공용 함수 __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. }
  34. if(is_string($securekey) && $securekey!=''){
  35. $this->_securekey = $securekey; }
  36. /**쿠키 설정
  37. * @param String $name 쿠키 이름
  38. * @param 혼합 $value 쿠키 값은 문자열, 배열, 객체 등일 수 있습니다.
  39. * @param int $expire 만료 시간
  40. */
  41. 공개 함수 세트($name, $value, $expire=0){
  42. $cookie_name = $this- >getName( $name); $cookie_expire = time() ($expire? $this->_expire)
  43. $cookie_value = $this->pack($value, $cookie_expire ); > $cookie_value = $this->authcode($cookie_value, 'ENCODE', $this->_securekey)
  44. if($cookie_name && $cookie_value && $cookie_expire){
  45. setcookie($ cookie_name, $cookie_value, $cookie_expire);
  46. }
  47. }
  48. /**读取cookie
  49. * @param String $name 쿠키 이름
  50. * @return 혼합 쿠키 값
  51. */
  52. 공용 함수 get($name){
  53. $cookie_name = $this->getName($name);
  54. if(isset($_COOKIE[$cookie_name])){
  55. $cookie_value = $this->authcode ($_COOKIE[ $cookie_name], 'DECODE', $this->_securekey)
  56. $cookie_value = $this->unpack($cookie_value);
  57. return isset($cookie_value[0 ])? cookie_value[0] : null;
  58. }else{
  59. return null
  60. }
  61. }
  62. /**쿠키를 업데이트하고, 내용만 업데이트해야 하는 경우 set 메소드를 사용하세요
  63. * @param String $name cookie name
  64. * @param mix $value cookie value
  65. * @ 부울 반환
  66. */
  67. 공개 함수 업데이트 ($name, $value){
  68. $cookie_name = $this->getName($name)
  69. if(isset($_COOKIE[$cookie_name])){
  70. $old_cookie_value = $this->authcode($_COOKIE[$cookie_name], 'DECODE', $this->_securekey)
  71. $old_cookie_value = $this->unpack($old_cookie_value)
  72. if (isset($old_cookie_value[1]) && $old_cookie_vlaue[1]>0){ // 이전 만료 시간 가져오기
  73. $cookie_expire = $old_cookie_value[1]
  74. // 데이터 업데이트
  75. $cookie_value = $this->pack($value, $cookie_expire)
  76. $cookie_value = $this->authcode($cookie_value, 'ENCODE', $this-> ;_securekey);
  77. if($cookie_name && $cookie_value && $cookie_expire){
  78. setcookie($cookie_name, $cookie_value, $cookie_expire)
  79. return true; }
  80. false 반환
  81. }
  82. /**쿠키 지우기
  83. * @param String $name 쿠키 이름
  84. */
  85. 공용 함수clear($name){
  86. $cookie_name = $this-> ;getName($ name);
  87. setcookie($cookie_name);
  88. }
  89. /**접두사 설정
  90. * @param String $prefix 쿠키 접두사
  91. */
  92. public function setPrefix($prefix){
  93. if( is_string($prefix) ) && $prefix!=''){
  94. $this->_prefix = $prefix
  95. }
  96. }
  97. /**만료 시간 설정
  98. * @param int $expire cookieexpire
  99. */
  100. 공개 함수 setExpire($expire){
  101. if(is_numeric($expire) && $expire>0){
  102. $this-> _expire = $만료;
  103. }
  104. }
  105. /**获取쿠키 이름
  106. * @param String $name
  107. * @return String
  108. */
  109. 비공개 함수 getName($name){
  110. return $this->_prefix? $this->_prefix.'_'.$name : $name;
  111. }
  112. /**pack
  113. * @param 혼합 $data 데이터
  114. * @param int $expire 판단에 사용되는 만료 시간
  115. * @return
  116. */
  117. 전용 함수 팩($data, $expire){
  118. if($data===''){
  119. return '';
  120. }
  121. $cookie_data = 배열();
  122. $cookie_data['값'] = $data;
  123. $cookie_data['expire'] = $expire;
  124. return json_encode($cookie_data);
  125. }
  126. /**unpack
  127. * @param 혼합 $data 데이터
  128. * @return 배열(데이터, 만료 시간)
  129. */
  130. 비공개 함수 unpack($data){
  131. if($data===''){
  132. return array(' ', 0);
  133. }
  134. $cookie_data = json_decode($data, true);
  135. if(isset($cookie_data['value']) && isset($cookie_data['expire'])){
  136. if(time()<$cookie_data['expire']){ // 未过期
  137. return array($cookie_data['value'], $cookie_data['expire']);
  138. }
  139. }
  140. return array('', 0);
  141. }
  142. /**데이터 암호화/복호화
  143. * @param String $str 원본 텍스트 또는 암호문
  144. * @param String $Operation ENCODE 또는 DECODE
  145. * @return String 설정에 따라 일반 텍스트 또는 암호문 반환
  146. */
  147. 개인 함수 authcode($string, $operation = 'DECODE'){
  148. $ckey_length = 4; // 随机密钥长degree 取值 0-32;
  149. $key = $this->_securekey;
  150. $key = md5($key);
  151. $keya = md5(substr($key, 0, 16));
  152. $keyb = md5(substr($key, 16, 16));
  153. $keyc = $ckey_length ? ($작업 == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
  154. $cryptkey = $keya.md5($keya.$keyc);
  155. $key_length = strlen($cryptkey);
  156. $string = $Operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf(' 0d', 0).substr(md5($string.$keyb), 0, 16).$string;
  157. $string_length = strlen($string);
  158. $result = '';
  159. $box = 범위(0, 255);
  160. $rndkey = 배열();
  161. for($i = 0; $i <= 255; $i ) {
  162. $rndkey[$i] = ord($cryptkey[$i % $key_length]);
  163. }
  164. for($j = $i = 0; $i < 256; $i ) {
  165. $j = ($j $box[$i] $rndkey[$i ]) % 256;
  166. $tmp = $box[$i];
  167. $box[$i] = $box[$j];
  168. $box[$j] = $tmp;
  169. }
  170. for($a = $j = $i = 0; $i < $string_length; $i ) {
  171. $a = ($a 1) % 256;
  172. $j = ($j $box[$a]) % 256;
  173. $tmp = $box[$a];
  174. $box[$a] = $box[$j];
  175. $box[$j] = $tmp;
  176. $result .= chr(ord($string[$i]) ^ ($box[($box[$a] $box[$j]) % 256]));
  177. }
  178. if($Operation == 'DECODE') {
  179. if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
  180. return substr($result , 26);
  181. } else {
  182. return '';
  183. }
  184. } else {
  185. return $keyc.str_replace('=', '', base64_encode($result));
  186. }
  187. }
  188. } // 수업 종료
  189. ?>
제제대码

2,演示示例 데모.php

  1. 'Cookies.class.php'가 필요합니다.
  2. $type = isset($_GET['type'])? strtolower($_GET['type']) : '';
  3. if(!in_array($type, array('set','get','update','clear'))){
  4. exit('유형이 존재하지 않음');
  5. }
  6. $obj = 새 쿠키('구성원', 10); // obj
  7. switch($type){
  8. case 'set': // 设置
  9. $data = array(
  10. 'name' => 'fdipzone',
  11. '성별' => '남성'
  12. );
  13. $obj->set('나', $data, 5);
  14. echo '쿠키 설정';
  15. 휴식;
  16. 케이스 'get': // 读取
  17. $result = $obj->get('me');
  18. echo '
    ';  </li>
    <li> print_r($result);  </li>
    <li> echo '
    ';
  19. echo '쿠키 가져오기';
  20. 휴식;
  21. 케이스 '업데이트': // 更新
  22. $data = array(
  23. 'name' => 'angelababy',
  24. 'gender' => 'female'
  25. );
  26. $flag = $obj->update('me', $data);
  27. if($flag){
  28. echo '쿠키 업데이트 성공';
  29. }else{
  30. echo '쿠키 업데이트 false';
  31. }
  32. 휴식;
  33. 케이스 'clear': // 清除
  34. $obj->clear('me');
  35. echo '쿠키 지우기';
  36. 휴식;
  37. }
  38. ?>
复代代码

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



원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿