首页 > 开发 > PHP > 正文

SESSION存放在数据库用法实例

2024-05-04 23:38:39
字体:
来源:转载
供稿:网友

这篇文章主要介绍了SESSION存放在数据库用法,自定义了一个简单的针对数据操作的session类并给出了使用该类存储到数据库的相关技巧,需要的朋友可以参考下

本文实例讲述了SESSION存放在数据库用法。分享给大家供大家参考。具体如下:

 

 
  1. <?php 
  2. /* 
  3. CREATE TABLE `ws_sessions` ( 
  4. `session_id` varchar(255) binary NOT NULL default '', 
  5. `session_expires` int(10) unsigned NOT NULL default '0', 
  6. `session_data` text, 
  7. PRIMARY KEY (`session_id`) 
  8. ) TYPE=InnoDB; 
  9. */ 
  10. class session { 
  11. // session-lifetime 
  12. var $lifeTime
  13. // mysql-handle 
  14. var $dbHandle
  15. function open($savePath$sessName) { 
  16. // get session-lifetime 
  17. $this->lifeTime = get_cfg_var("session.gc_maxlifetime"); 
  18. // open database-connection 
  19. $dbHandle = @mysql_connect("localhost","root",""); 
  20. $dbSel = @mysql_select_db("test",$dbHandle); 
  21. // return success 
  22. if(!$dbHandle || !$dbSel
  23. return false; 
  24. $this->dbHandle = $dbHandle
  25. return true; 
  26. function close() { 
  27. $this->gc(ini_get('session.gc_maxlifetime')); 
  28. // close database-connection 
  29. return @mysql_close($this->dbHandle); 
  30. function read($sessID) { 
  31. // fetch session-data 
  32. $res = mysql_query("SELECT session_data AS d FROM ws_sessions 
  33. WHERE session_id = '$sessID' 
  34. AND session_expires > ".time(),$this->dbHandle); 
  35. // return data or an empty string at failure 
  36. if($row = mysql_fetch_assoc($res)) 
  37. return $row['d']; 
  38. return ""
  39. function write($sessID,$sessData) { 
  40. // new session-expire-time 
  41. $newExp = time() + $this->lifeTime; 
  42. // is a session with this id in the database? 
  43. $res = mysql_query("SELECT * FROM ws_sessions 
  44. WHERE session_id = '$sessID'",$this->dbHandle); 
  45. // if yes, 
  46. if(mysql_num_rows($res)) { 
  47. // ...update session-data 
  48. mysql_query("UPDATE ws_sessions 
  49. SET session_expires = '$newExp'
  50. session_data = '$sessData' 
  51. WHERE session_id = '$sessID'",$this->dbHandle); 
  52. // if something happened, return true 
  53. if(mysql_affected_rows($this->dbHandle)) 
  54. return true; 
  55. // if no session-data was found, 
  56. else { 
  57. // create a new row 
  58. mysql_query("INSERT INTO ws_sessions ( 
  59. session_id, 
  60. session_expires, 
  61. session_data) 
  62. VALUES( 
  63. '$sessID'
  64. '$newExp'
  65. '$sessData')",$this->dbHandle); 
  66. // if row was created, return true 
  67. if(mysql_affected_rows($this->dbHandle)) 
  68. return true; 
  69. // an unknown error occured 
  70. return false; 
  71. function destroy($sessID) { 
  72. // delete session-data 
  73. mysql_query("DELETE FROM ws_sessions WHERE session_id = '$sessID'",$this->dbHandle); 
  74. // if session was deleted, return true, 
  75. if(mysql_affected_rows($this->dbHandle)) 
  76. return true; 
  77. // ...else return false 
  78. return false; 
  79. function gc($sessMaxLifeTime) { 
  80. // delete old sessions 
  81. mysql_query("DELETE FROM ws_sessions WHERE session_expires < ".time(),$this->dbHandle); 
  82. // return affected rows 
  83. return mysql_affected_rows($this->dbHandle); 
  84. $session = new session(); 
  85. session_set_save_handler(array(&$session,"open"), 
  86. array(&$session,"close"), 
  87. array(&$session,"read"), 
  88. array(&$session,"write"), 
  89. array(&$session,"destroy"), 
  90. array(&$session,"gc")); 
  91. session_start(); 
  92. // etc... 
  93. ?> 

希望本文所述对大家的php程序设计有所帮助。

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