>  기사  >  백엔드 개발  >  데이터베이스에 세션을 쓰는 PHP 클래스

데이터베이스에 세션을 쓰는 PHP 클래스

WBOY
WBOY원래의
2016-07-25 08:54:11720검색
  1. class session_handler {

  2. protected $maxlifetime = null;

  3. protected $dbHandle = null;
  4. public $config = null;

  5. 공용 정적 함수 초기화($args) {

  6. return new self($args);
  7. }

  8. 공용 함수 __construct($args) {

  9. $this->config = $args;

  10. $this->maxlifetime = get_cfg_var("session.gc_maxlifetime");
  11. session_set_save_handler(
  12. array($this, "open"),
  13. array($this, "닫기"),
  14. array($this, "읽기"),
  15. array($this, "쓰기"),
  16. array($this, "파괴"),
  17. array($this, "gc"));
  18. }

  19. 공개 함수 open() {

  20. $this->link = mysqli_connect(
  21. $this->config['host'],
  22. $this->config['user'],
  23. $this->config['password'],
  24. $this->config['database']);
  25. mysqli_set_charset($this->link, "utf8");
  26. $ sql = 'CREATE TABLE IF NOT EXISTS `%s` (
  27. `session_id` varchar(255) NOT NULL,
  28. `session_data` text,
  29. `session_expires` char(10) NOT NULL,
  30. PRIMARY KEY (`session_id`)
  31. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;';
  32. $sql = sprintf($sql, $this->config['table']);
  33. mysqli_query($this->link, $sql);
  34. return true;
  35. }

  36. public function close() {

  37. return true;
  38. }

  39. 공개 함수 읽기($session_id) {

  40. if(empty($session_id)) return null;

  41. $sql = 'SELECT `session_data` AS `data` FROM `%s` WHERE `session_id` = "%s" AND `session_expires` > "%u"';

  42. $sql = sprintf($sql,
  43. mysqli_real_escape_string($this->link, $this->config['table']),
  44. mysqli_real_escape_string($this- >link, $session_id),
  45. time());

  46. $result = mysqli_query($this->link, $sql);

  47. $row = mysqli_fetch_assoc($result);
  48. return $row['data'];
  49. }

  50. 공용 함수 쓰기($session_id, $session_data) {

  51. if(empty($session_id)) return null;

  52. $newExpires = time() $this->maxlifetime;

  53. $sql = 'REPLACE INTO `%s` SET `session_id` = "%s", `session_data` = "%s", `session_expires` = " %u"';
  54. $sql = sprintf($sql,
  55. mysqli_real_escape_string($this->link, $this->config['table']),
  56. mysqli_real_escape_string($this-> ;link, $session_id),
  57. mysqli_real_escape_string($this->link, $session_data),
  58. $newExpires);

  59. $result = mysqli_query($this->link, $sql);

  60. return mysqli_affected_rows($this->link);
  61. }

  62. 공개 함수 destroy($session_id) {

  63. $sql = '`%s`에서 삭제 `session_id` = "%s"';
  64. $sql = sprintf($sql,
  65. mysqli_real_escape_string($this ->link, $this->config['table']),
  66. mysqli_real_escape_string($this->link, $session_id));
  67. $result = mysqli_query($this->link, $sql);
  68. return mysqli_affected_rows($this->link);
  69. }

  70. public function gc() {

  71. $sql = 'DELETE FROM `%s` WHERE `session_expires` < "%u"';
  72. $sql = sprintf($sql,
  73. mysqli_real_escape_string($this->link, $this->config['table']),
  74. time());
  75. $result = mysqli_query($this->link, $sql);

  76. return mysqli_affected_rows($this->link);
  77. }
  78. }
  79. 클래스 세션 {
  80. public static $ 컬렉션 = null;

  81. 공개 정적 함수 open($clean = false, $token = false) {

  82. if($clean) ob_end_clean();
  83. if($token) session_id($token);
  84. session_start();
  85. self::$collection = $_SESSION;
  86. }

  87. 공개 정적 함수 id() {

  88. $num_args = func_num_args();
  89. if($num_args) {
  90. $args = func_get_arg(0);
  91. return session_id($args);
  92. }else{
  93. return session_id();
  94. }
  95. }

  96. 공개 정적 함수 get($name) {

  97. return isset($_SESSION[$name]) ? $_SESSION[$name] : null;
  98. }

  99. 공용 정적 함수 집합($name, $value) {

  100. $_SESSION[$name] = $value;
  101. return true;
  102. }

  103. 공개 정적 함수 삭제($name) {

  104. if(!isset($_SESSION[$name])) return null;
  105. unset($_SESSION[$name]);
  106. return true;
  107. }
  108. 공용 정적 함수 destroy() {

  109. session_destroy();
  110. }

  111. }

  112. $config = array(
  113. "host"=> "127.0 .0.1",
  114. "user"=> "root",
  115. "password"=> "123456",
  116. "database"=> "test",
  117. "charset"= > "utf8",
  118. "table"=> "user_session");
  119. session_handler::init($config);
  120. session::open();
  121. session::set( "profile", array("id"=> 1, "user"=> "haowei", "vip-level"=> 6));

제제대码


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.