session.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. /**
  3. * PHP SDK for QQ登录 OpenAPI
  4. *
  5. * @version 1.2
  6. * @author connect@qq.com
  7. * @copyright © 2011, Tencent Corporation. All rights reserved.
  8. */
  9. /**
  10. * @brief 设置session配置
  11. */
  12. /**
  13. * CREATE TABLE `tbl_session` (
  14. * `session_id` varchar(255) binary NOT NULL default '',
  15. * `session_expires` int(10) unsigned NOT NULL default '0',
  16. * `session_data` text,
  17. * PRIMARY KEY (`session_id`)
  18. * ) ENGINE=MyISAM;
  19. */
  20. class Session
  21. {
  22. //mysql的主机地址
  23. const db_host = "127.0.0.1"; //需要第三方指定ip地址
  24. //数据库用户名
  25. const db_user = "redfox"; //需要第三方指定自己的用户名
  26. //数据库密码
  27. const db_pwd = "redfox@401"; //需要第三方指定自己的库据库密码
  28. //数据库
  29. const db_name = "test"; //需要第三方指定数据库
  30. //数据库表
  31. const db_table = "tbl_session"; //需要第三方指定数据表
  32. //mysql-handle
  33. private $db_handle;
  34. //session-lifetime
  35. private $lifeTime;
  36. function open($savePath, $sessName)
  37. {
  38. // get session-lifetime
  39. $this->lifeTime = get_cfg_var("session.gc_maxlifetime");
  40. // open database-connection
  41. $db_handle = @mysql_connect(self::db_host, self::db_user, self::db_pwd);
  42. $dbSel = @mysql_select_db(self::db_name, $db_handle);
  43. // return success
  44. if(!$db_handle || !$dbSel)
  45. return false;
  46. $this->db_handle = $db_handle;
  47. return true;
  48. }
  49. function close()
  50. {
  51. $this->gc(ini_get('session.gc_maxlifetime'));
  52. // close database-connection
  53. return @mysql_close($this->db_handle);
  54. }
  55. function read($sessID)
  56. {
  57. // fetch session-data
  58. $res = @mysql_query("SELECT session_data AS d FROM ".self::db_table."
  59. WHERE session_id = '$sessID'
  60. AND session_expires > ".time(), $this->db_handle);
  61. // return data or an empty string at failure
  62. if($row = @mysql_fetch_assoc($res))
  63. return $row['d'];
  64. return "";
  65. }
  66. function write($sessID, $sessData)
  67. {
  68. // new session-expire-time
  69. $newExp = time() + $this->lifeTime;
  70. // is a session with this id in the database?
  71. $res = @mysql_query("SELECT * FROM ".self::db_table."
  72. WHERE session_id = '$sessID'", $this->db_handle);
  73. // if yes,
  74. if(@mysql_num_rows($res))
  75. {
  76. // ...update session-data
  77. @mysql_query("UPDATE ".self::db_table."
  78. SET session_expires = '$newExp',
  79. session_data = '$sessData'
  80. WHERE session_id = '$sessID'", $this->db_handle);
  81. // if something happened, return true
  82. if(@mysql_affected_rows($this->db_handle))
  83. return true;
  84. }
  85. else // if no session-data was found,
  86. {
  87. // create a new row
  88. @mysql_query("INSERT INTO ".self::db_table." (
  89. session_id,
  90. session_expires,
  91. session_data)
  92. VALUES(
  93. '$sessID',
  94. '$newExp',
  95. '$sessData')", $this->db_handle);
  96. // if row was created, return true
  97. if(@mysql_affected_rows($this->db_handle))
  98. return true;
  99. }
  100. // an unknown error occured
  101. return false;
  102. }
  103. function destroy($sessID)
  104. {
  105. // delete session-data
  106. @mysql_query("DELETE FROM ".self::db_table." WHERE session_id = '$sessID'", $this->db_handle);
  107. // if session was deleted, return true,
  108. if(@mysql_affected_rows($this->db_handle))
  109. return true;
  110. // ...else return false
  111. return false;
  112. }
  113. function gc($sessMaxLifeTime)
  114. {
  115. // delete old sessions
  116. @mysql_query("DELETE FROM ".self::db_table." WHERE session_expires < ".time(), $this->db_handle);
  117. // return affected rows
  118. return @mysql_affected_rows($this->db_handle);
  119. }
  120. }
  121. /**
  122. * 指定session有效的域名
  123. * ini_set("session.cookie_domain", ".domain.com");
  124. * .domain.com是站点的主域名,请注意前面个有一个'.'
  125. */
  126. define("MAIN_DOMAIN", ""); //设置主域名
  127. /**
  128. * 不同子域名下共享session信息
  129. * COOKIE_DOMAIN = false 禁止该功能
  130. * COOKIE_DOMAIN = true 启用该功能
  131. * 默认禁止
  132. * 开启前提需要定义MAIN_DOMAIN常量
  133. */
  134. define("COOKIE_DOMAIN", false);
  135. if (defined("COOKIE_DOMAIN") && COOKIE_DOMAIN)
  136. {
  137. if (defined("MAIN_DOMAIN"))
  138. @ini_set("session.cookie_domain", MAIN_DOMAIN);
  139. }
  140. /**
  141. * 同一个主域名,不同服务器之间共享session信息
  142. * USER_SESSION = false 禁用该功能
  143. * USER_SESSION = true 启用该功能
  144. * 默认禁止
  145. * 开启前提需要建立mysql数据表
  146. */
  147. define("USER_SESSION", false);
  148. if (defined("USER_SESSION") && USER_SESSION)
  149. {
  150. @ini_set("session.save_handler", "user");
  151. $session = new Session;
  152. @session_module_name("user");
  153. @session_set_save_handler(
  154. array(&$session, "open"),
  155. array(&$session, "close"),
  156. array(&$session, "read"),
  157. array(&$session, "write"),
  158. array(&$session, "destroy"),
  159. array(&$session, "gc"));
  160. }
  161. session_start();
  162. ?>