首页 > 开发 > 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); 

以上所述就是本文的全部内容了,希望大家能够喜欢。

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