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

首頁 > 開發 > PHP > 正文

php實現將Session寫入數據庫

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

這篇文章主要介紹了php實現將Session寫入數據庫的相關資料,需要的朋友可以參考下

使用session_set_save_handler()函數,將Session的內容寫入數據庫

 

 
  1. <?php 
  2. /* 
  3. *@author Fahy 
  4. *數據庫為mysql, 
  5. *數據庫名為session,表名為session, 
  6. *表中字段包括PHPSESSID,update_time,client_ip,data 
  7. */ 
  8. class Session{ 
  9. private static $handler = null
  10. private static $ip = null
  11. private static $lifetime = null
  12. private static $time = null
  13.  
  14. //配置靜態變量 
  15. private static function init($handler){ 
  16. self::$handler = $handler; //獲取數據庫資源 
  17. self::$ip = !empty($_SERVER["REMOTE_ADDR"])? $_SERVER["REMOTE_ADDR"]:'unkonw'//獲取客戶端ip 
  18. self::$lifetime = ini_get('session.gc_maxlifetime'); //獲取session生命周期 
  19. self::$time = time(); //獲取當前時間 
  20. //調用session_set_save_handler()函數并開啟session 
  21. static function start($pdo){ 
  22. self::init($pdo); 
  23. session_set_save_handler( 
  24. array(__CLASS__,'open'), 
  25. array(__CLASS__,'close'), 
  26. array(__CLASS__,'read'), 
  27. array(__CLASS__,'write'), 
  28. array(__CLASS__,'destroy'), 
  29. array(__CLASS__,'gc'
  30. ); 
  31. session_start(); 
  32.  
  33. public static function open($path,$name){ 
  34. return true
  35. public static function close(){ 
  36. return true
  37.  
  38. //查詢數據庫中的數據 
  39. public static function read($PHPSESSID){ 
  40. $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?"
  41. $stmt = self::$handler->prepare($sql); 
  42. $stmt->execute(array($PHPSESSID)); 
  43. if(!$result = $stmt->fetch(PDO::FETCH_ASSOC)){ 
  44. return ''
  45. if(self::$ip == $result['client_ip']){ 
  46. self::destroy($PHPSESSID); 
  47. return ''
  48. if(($result['update_time']+self::$lifetime)<self::$time){ 
  49. self::destroy($PHPSESSID); 
  50. return ''
  51. return $result['data']; 
  52. /* 
  53. *首先查詢該session是否存在數據,如果存在,則更新數據,如果不存在,則插入數據 
  54. */ 
  55. //將session寫入數據庫中,$data傳入session中的keys和values數組 
  56. public static function write($PHPSESSID,$data){ 
  57. $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?"
  58. $stmt = self::$handler->prepare($sql); 
  59. $stmt->execute(array($PHPSESSID)); 
  60.  
  61. if($result=$stmt->fetch(PDO::FETCH_ASSOC)){  
  62. if($result['data'] != $data || self::$time > ($result['update_time']+30)){ 
  63. $sql = "update session set update_time=?,data=? where PHPSESSID = ?"
  64. $stmt = self::$handler->prepare($sql); 
  65. $stmt->execute(array($self::$time,$data,$PHPSESSID)); 
  66. }else
  67. if(!empty($data)){ 
  68. try
  69. $sql = "insert into session(PHPSESSID,update_time,client_ip,data) values(?,?,?,?)"
  70. }catch(PDOException $e){ 
  71. echo $e->getMessage(); 
  72. $sth = self::$handler->prepare($sql); 
  73. $sth->execute(array($PHPSESSID,self::$time,self::$ip,$data)); 
  74. return true
  75.  
  76. public static function destroy($PHPSESSID){ 
  77. $sql = "delete from session where PHPSESSID = ?"
  78. $stmt = self::$handler->prepare($sql); 
  79. $stmt->execute(array($PHPSESSID)); 
  80. return true
  81. public static function gc($lifetime){ 
  82. $sql = "delete from session where update_time<?"
  83. $stmt = self::$handler->prepare($sql); 
  84. $stmt->execute(array(self::$time-$lifetime)); 
  85. return true
  86. //使用PDO連接數據庫 
  87. try
  88. $pdo = new PDO("mysql:host=localhost;dbname=session","root","hwj193"); 
  89. }catch(PDOException $e){ 
  90. echo $e->getMessage(); 
  91. //傳遞數據庫資源 
  92. Session::start($pdo); 

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云林县| 琼中| 花莲市| 固镇县| 拉萨市| 衡山县| 广昌县| 库车县| 临颍县| 林甸县| 平南县| 赤水市| 来凤县| 嵩明县| 五大连池市| 孟州市| 瑞丽市| 丹凤县| 南溪县| 保德县| 昌宁县| 杨浦区| 渝北区| 石景山区| 汉源县| 彭山县| 莎车县| 延川县| 克拉玛依市| 壶关县| 九江县| 肥西县| 望奎县| 肃南| 大方县| 乌鲁木齐县| 湖南省| 方城县| 方城县| 宝山区| 乌恰县|