首页 > 开发 > 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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表