session_mysql.class.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. /**
  3. * session mysql 数据库存储类
  4. *
  5. * @copyright (C) 2005-2010 PHPCMS
  6. * @license http://www.phpcms.cn/license/
  7. * @lastmodify 2010-6-8
  8. */
  9. class session_mysql {
  10. var $lifetime = 1800;
  11. var $db;
  12. var $table;
  13. /**
  14. * 构造函数
  15. *
  16. */
  17. public function __construct() {
  18. $this->db = pc_base::load_model('session_model');
  19. $this->lifetime = pc_base::load_config('system','session_ttl');
  20. session_set_save_handler(array(&$this,'open'), array(&$this,'close'), array(&$this,'read'), array(&$this,'write'), array(&$this,'destroy'), array(&$this,'gc'));
  21. session_start();
  22. }
  23. /**
  24. * session_set_save_handler open方法
  25. * @param $save_path
  26. * @param $session_name
  27. * @return true
  28. */
  29. public function open($save_path, $session_name) {
  30. return true;
  31. }
  32. /**
  33. * session_set_save_handler close方法
  34. * @return bool
  35. */
  36. public function close() {
  37. return $this->gc($this->lifetime);
  38. }
  39. /**
  40. * 读取session_id
  41. * session_set_save_handler read方法
  42. * @return string 读取session_id
  43. */
  44. public function read($id) {
  45. $r = $this->db->get_one(array('sessionid'=>$id), 'data');
  46. return $r ? $r['data'] : '';
  47. }
  48. /**
  49. * 写入session_id 的值
  50. *
  51. * @param $id session
  52. * @param $data 值
  53. * @return mixed query 执行结果
  54. */
  55. public function write($id, $data) {
  56. $uid = isset($_SESSION['userid']) ? $_SESSION['userid'] : 0;
  57. $roleid = isset($_SESSION['roleid']) ? $_SESSION['roleid'] : 0;
  58. $groupid = isset($_SESSION['groupid']) ? $_SESSION['groupid'] : 0;
  59. $m = defined('ROUTE_M') ? ROUTE_M : '';
  60. $c = defined('ROUTE_C') ? ROUTE_C : '';
  61. $a = defined('ROUTE_A') ? ROUTE_A : '';
  62. if(strlen($data) > 255) $data = '';
  63. $ip = ip();
  64. $sessiondata = array(
  65. 'sessionid'=>$id,
  66. 'userid'=>$uid,
  67. 'ip'=>$ip,
  68. 'lastvisit'=>SYS_TIME,
  69. 'roleid'=>$roleid,
  70. 'groupid'=>$groupid,
  71. 'm'=>$m,
  72. 'c'=>$c,
  73. 'a'=>$a,
  74. 'data'=>$data,
  75. );
  76. return $this->db->insert($sessiondata, 1, 1);
  77. }
  78. /**
  79. * 删除指定的session_id
  80. *
  81. * @param $id session
  82. * @return bool
  83. */
  84. public function destroy($id) {
  85. return $this->db->delete(array('sessionid'=>$id));
  86. }
  87. /**
  88. * 删除过期的 session
  89. *
  90. * @param $maxlifetime 存活期时间
  91. * @return bool
  92. */
  93. public function gc($maxlifetime) {
  94. $expiretime = SYS_TIME - $maxlifetime;
  95. return $this->db->delete("`lastvisit`<$expiretime");
  96. }
  97. }
  98. ?>