国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php基于session實現數據庫交互的類實例

2024-05-04 23:38:32
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了php基于session實現數據庫交互的類,實例分析了php結合session操作數據庫的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了php基于session實現數據庫交互的類。分享給大家供大家參考。具體如下:

 

 
  1. <?php 
  2. /** 
  3. * session 數據庫存儲類 
  4. */ 
  5. class Session { 
  6. private static $session_id = 0; 
  7. private static $session_data = array(); 
  8. private static $is_update = FALSE; 
  9. private static $is_del = FALSE; 
  10. private static $is_gc = FALSE; 
  11. private static $dbo = NULL; //數據庫連接句柄 
  12. private static $gc_max_time = 1440; 
  13. private static $table = 'sessions'
  14. private static $pre_key = 'weige';//session 密鑰 
  15. //捆綁使用哈 
  16. private static $gc_rate_de = 100;//代表分母 
  17. private static $gc_rate_co = 20;//代表分子 
  18. private static $path = '/';//保存路徑 
  19. private static $domain = null; //域 
  20. private static $secure = false;//默認 
  21. private static $httponly = false;//默認 
  22. /** 
  23. * 獲取數據庫句柄 私有 
  24. */ 
  25. private static function open()  
  26. if (!self::$dbo)  
  27. self::$dbo = Db::factory(); 
  28. return TRUE; 
  29. /** 
  30. * 設置 
  31. * */ 
  32. public static function set($key$val=NULL)  
  33. self::open(); 
  34. $data = self::read(); 
  35. if ($data === FALSE) 
  36. $data = array(); 
  37. if (!$val && is_array($key)) 
  38. $data = $key
  39. }  
  40. else if ($val && is_string($key)) 
  41. $data[$key] = $val
  42. self::write($data); 
  43. self::close(); 
  44. /** 
  45. *獲取值  
  46.  
  47. */ 
  48. public static function get($key=NULL) { 
  49. self::open(); 
  50. self::$session_data = self::read(); 
  51. $ret = ''
  52. if (!$key) { 
  53. $ret = self::$session_data
  54. else if(is_array(self::$session_data) && isset(self::$session_data[$key])) { 
  55. $ret = self::$session_data[$key]; 
  56. self::update();  
  57. self::close(); 
  58. return $ret
  59. /** 
  60. * 刪除或者重置 
  61. * */ 
  62. public static function del($key
  63. if (!self::$is_del)  
  64. self::open(); 
  65. $val = self::read(); 
  66. if (isset($val[$key]))  
  67. unset($val[$key]); 
  68. $session_id = self::$session_id
  69. $session_data = serialize($val); 
  70. $session_expire = TIME + self::get_gc_maxtime(); 
  71. self::$dbo->query("update ".self::$table." set value='$session_data', expiry='$session_expire' where session_id='$session_id'"); 
  72. self::close(); 
  73. self::$is_del = TRUE; 
  74. /** 
  75. * 銷毀 
  76.  
  77. * */ 
  78. public static function destroy()  
  79. $session_id = self::get_session_id(); 
  80. $_COOKIE['WBSID'] = ''
  81. self::open(); 
  82. self::$dbo->query("delete from ".self::$table." where session_id='$session_id'"); 
  83. self::close(); 
  84. /** 
  85. * 讀取 私有 
  86. * */ 
  87. private static function read() 
  88. $session_id = self::$session_id
  89. if (!$session_id) { 
  90. $session_id = self::get_session_id(); 
  91. if (!$session_idreturn array(); 
  92. $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? md5($_SERVER['HTTP_USER_AGENT']) : ''
  93. $client_ip = Fun::getIp(); 
  94. $session_expire = TIME - self::get_gc_maxtime(); 
  95. $rs = self::$dbo->fetchRow("select session_id, value, agent, ip from ".self::$table." 
  96. where session_id='$session_id' and expiry>'$session_expire'"); 
  97. if (!$rs || $rs['agent'] != $user_agent || $rs['ip'] != $client_ip)  
  98. return FALSE; 
  99. self::$session_id = $rs['session_id']; 
  100. return unserialize($rs['value']); 
  101. /** 
  102. * session 寫入 私有 
  103. * */ 
  104. private static function write(array $session_data)  
  105. $session_id = self::$session_id
  106. if (!$session_id
  107. $session_id = self::get_session_id(); 
  108. $session_expire = TIME + self::get_gc_maxtime(); 
  109. $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? md5($_SERVER['HTTP_USER_AGENT']) : ''
  110. $client_ip = Fun::getIp(); 
  111. $session_data = serialize($session_data); 
  112. if (self::$session_id && self::$session_id === $session_id)  
  113. self::$dbo->query("update ".self::$table." set value='$session_data', expiry='$session_expire', agent='$user_agent', ip='$client_ip' where session_id='$session_id'"); 
  114. }  
  115. else 
  116. self::$session_id = $session_id = self::create_session_id(); 
  117. self::$dbo->query("insert into ".self::$table."(session_id, value, expiry, agent, ip)  
  118. values('$session_id''$session_data''$session_expire''$user_agent''$client_ip')"); 
  119. return true; 
  120. /** 
  121. * session 更新 私有 
  122. * */ 
  123. private static function update()  
  124. if (!self::$is_update)  
  125. $session_id = self::$session_id
  126. $session_expire = TIME + self::get_gc_maxtime(); 
  127. self::$dbo->query("update ".self::$table." set expiry='$session_expire' where session_id='$session_id'"); 
  128. self::$is_update = TRUE; 
  129. private static function close()  
  130. if (!self::$is_gc && mt_rand(1, self::$gc_rate_de)%self::$gc_rate_co == 0)  
  131. self::gc(); 
  132. self::$is_gc = TRUE; 
  133. /** 
  134. * 過期session 清除 隨機觸發 
  135. * */ 
  136. private static function gc()  
  137. $session_expire = TIME - self::get_gc_maxtime(); 
  138. self::$dbo->query("delete from ".self::$table." where expiry<'$session_expire'"); 
  139. private static function get_session_id()  
  140. if (isset($_COOKIE['WBSID']) && strlen($_COOKIE['WBSID'])==32)  
  141. $sid = $_COOKIE['WBSID']; 
  142. setcookie('WBSID'$sid, TIME + self::get_gc_maxtime(), self::$path, self::$domain, self::$secure, self::$httponly); 
  143. return $sid
  144. return null; 
  145. private static function create_session_id()  
  146. $sid = self::get_session_id(); 
  147. if (!$sid)  
  148. $sid = Fun::getIp() . TIME . microtime(TRUE) . mt_rand(mt_rand(0, 100), mt_rand(100000, 90000000)); 
  149. $sid = md5(self::$pre_key . $sid); 
  150. setcookie('WBSID'substr($sid, 0, 32), TIME + self::get_gc_maxtime(), self::$path, self::$domain, self::$secure, self::$httponly); 
  151. return $sid
  152. public static function get_gc_maxtime() 
  153. return self::$gc_max_time

希望本文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昆明市| 临城县| 治县。| 甘泉县| 元朗区| 琼结县| 乡宁县| 西和县| 安义县| 邛崃市| 团风县| 南京市| 红原县| 沁水县| 胶州市| 罗城| 临澧县| 禹城市| 保靖县| 白玉县| 会同县| 绥化市| 阿拉善右旗| 昭苏县| 尖扎县| 那坡县| 阿荣旗| 昆山市| 湖南省| 湟源县| 东乡| 团风县| 德庆县| 平邑县| 兴安县| 海林市| 玉龙| 奉新县| 本溪| 宜兴市| 新郑市|