session.lib.php
上传用户:jiangbw
上传日期:2022-03-16
资源大小:49k
文件大小:16k
源码类别:

MySQL数据库

开发平台:

Unix_Linux

  1. <?
  2. /*======================================================================*
  3. || #################################################################### ||
  4. || # BUILD UNDER PHP SCRIPTNET 3.2.1 FRAMEWORK ||
  5. || # ---------------------------------------------------------------- # ||
  6. || # Code2Art Open Source Software. All Rights Reserved.  ||
  7. || # This file should be redistributed in whole or significant part.  # ||
  8. || # ------------------ SCRIPTNET IS FREE SOFTWARE ------------------ # ||
  9. || # http://www.code2art.com | http://www.code2art.com/scriptnet      # ||
  10. || # Copyleft by Benediktus Ardian Hersanto, SE       # ||
  11. || # Sorry if this framework is still unavailable for public       # ||
  12. || # because I still searching on my own head.       # ||
  13. || #################################################################### ||
  14. *======================================================================*/
  15. /*======================================================================*
  16. || #################################################################### ||
  17. || DBF to MySQL Bulk Converter 2.0 ||
  18. ||______________________________________________________________________||
  19. || This utility was developed on 2006, since this were used to be on    ||
  20. || my own library. But I think I should share it to you, because I      ||
  21. || need to save my work on Internet (I don't believe on my own HD drive)||
  22. || it always crash and had a terrible bad sectors.  ||
  23. || Thanks to all person who download this utility, I hope you enjoy it. ||
  24. || ||
  25. || Regards, ||
  26. || Benediktus Ardian Hersanto,SE (ardie_b@yahoo.com) ||
  27. /*======================================================================*/
  28. // ---------------------------------------------------------------------//
  29. // Free to use for everyone who understand PHP
  30. // ---------------------------------------------------------------------//
  31. // Session.Lib.Php is a part of PHP SCRIPTNET FRAMEWORK
  32. // LAST UPDATE : 28.07.08
  33. // Changed :
  34. // Set Cookie are handled through header command not using standard PHP
  35. // Added Save Handler methods for PHP4 Session (the session file reside on web dir)
  36. // Added Function session_unregister($name)
  37. // Added Function for limiting cookie lifetime - PHP Session
  38. // Added Function for limiting cookie lifetime - FILE Text Session
  39. //
  40. // Dependency :
  41. //  - init.php (Environtment setup library)
  42. // - config.ini.php (Configuration Settings)
  43. //
  44. // Still on Development
  45. // - SESSION Based on Database Server
  46. // --------------------------------------------------------------------------------
  47. // --------------------------------------------------------------------------------
  48. /* NOTES on php.ini settings due to hardening security on web server
  49. - if session.use_only_cookies is disabled and session.use_cookies is disabled so
  50.   you have to enable session.use_trans_sid to easing your life.
  51. /*===================================================================================*/
  52. // SESSION TYPES SUPPORTED BY THIS CLASS
  53. define('SESS_TYPE_FILE',0x01);
  54. define('SESS_TYPE_DB',0x02);
  55. define('SESS_TYPE_PHP',0x03);
  56. /* GENERAL FUNCTION FOR SESSION CLASS TO WORK 
  57.    ANY OF THESE FUNCTION ARE NOT AVAILABLE ON PHP 3 */
  58. /* SESSION ACTION PROCEDURE 
  59. 1. Generate ID to identify each clients
  60. 2. Create Temporary file to store each clients data
  61. */
  62. if(!function_exists('open')&&!function_exists('close')&&!function_exists('read')) {
  63. function open($sess_save_path='', $session_name='') 
  64. {
  65.   //$sess_save_path, $sess_session_name;
  66.   $sess_save_path = ROOT_DIR.SESS_TMP_DIR;//$save_path;
  67.   return true;
  68. }
  69. function close() 
  70. {
  71.   return true;
  72. }
  73. function read($id) 
  74. {
  75.   //$sess_save_path, $sess_session_name;
  76.   $sess_file = $sess_save_path."/sess_".$id;
  77.   if(file_exists($sess_file)) {
  78. $fp = fopen($sess_file,"r");
  79. if($fp) {
  80. if(filesize($sess_file)>0)
  81. return fread($fp,filesize($sess_file));
  82. else return;
  83. }
  84. fclose($fp);
  85.   } else return;
  86. }
  87. function write($id, $sess_data) 
  88. {
  89.   //global $sess_save_path, $sess_session_name;
  90.   $sess_file = $sess_save_path."/sess_".$id;
  91.   $fp = fopen($sess_file, "w");
  92.   if ($fp) {
  93. if(fwrite($fp, $sess_data)===FALSE) { echo "cannot write to session file";return false;}
  94. fclose($fp);
  95. return true;
  96.   } else {
  97. return false;
  98.   }
  99. }
  100. function destroy($id) 
  101. {
  102.   //global $sess_save_path, $sess_session_name;
  103.    
  104.   $sess_file = $sess_save_path."/sess_".$id;
  105.   return(@unlink($sess_file));
  106. }
  107. /*********************************************
  108.  * WARNING - You will need to implement some *
  109.  * sort of garbage collection routine here.  *
  110.  *********************************************/
  111. function gc($maxlifetime=0) 
  112. {
  113.   return true;
  114. }
  115. }
  116. class session extends dynamicClass {
  117. var $sess_name = "PHPSESSID";
  118. var $sess_file=null;
  119. var $type = SESS_TYPE_FILE;
  120. var $id;
  121. var $_varname = 'HTTP_SESSION_VARS';
  122. var $security_enabled = false;
  123. function session() {
  124. global $sess_session_name;
  125. if((ini_get('session.use_only_cookies')=='0')&&(ini_get('session.use_cookies')=='0')) {
  126. $this->security_enabled = true;
  127. }
  128. $this->directory = ROOT_DIR.SESS_TMP_DIR;
  129. if(trim(STORAGE_TYPE)=='SESS_FILES') $this->type = SESS_TYPE_FILE;
  130. else if(trim(STORAGE_TYPE)=='PHP_DEFAULT') $this->type = SESS_TYPE_PHP;
  131. else if(trim(STORAGE_TYPE)=='SESS_DB') $this->type = SESS_TYPE_DB;
  132. if(USE_PHP_DEFAULT_HANDLER) $this->type = SESS_TYPE_PHP;
  133. if(!is_dir($this->directory)) if(!mkdir($this->directory,0777)) trigger_error('session's temporary directory "{$this->directory}" is read-only or does not exist',E_USER_WARNING);
  134. if (PHPVERSION<4.01) $this->type=SESS_TYPE_FILE; //DEFAULT SESSION TYPE FOR PHP 3
  135. else $this->_varname = ((PHPVERSION<4.10)?'HTTP_SESSION_VARS':'_SESSION');
  136. if ($this->type==SESS_TYPE_PHP) {
  137. $this->sess_name = ((!defined('SESS_NAME'))?$this->sess_name:SESS_NAME);
  138. session_name($this->sess_name);
  139. // Override Cookie Data Handling
  140. if(defined('USE_PHP_DEFAULT_HANDLER')&&(!USE_PHP_DEFAULT_HANDLER)) {
  141. session_save_path($this->directory);
  142. session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
  143. }
  144. /*echo "The previous session name was $name<br />Now is ",session_name();
  145. echo "<BR>";*/
  146. if(!isset($GLOBALS[$this->_varname])) {
  147. if(!defined('COOKIE_LIFETIME')) define('COOKIE_LIFETIME',5);
  148. if(!defined('COOKIE_PATH')) define('COOKIE_PATH','/');
  149. if(defined('COOKIE_DOMAIN')&&COOKIE_DOMAIN!='') {
  150. if(defined('COOKIE_SECURE')&&COOKIE_SECURE!=0) {
  151. if(!$this->security_enabled)
  152. session_set_cookie_params(time()+((defined('COOKIE_LIFETIME')?(60*60*((1/60)*COOKIE_LIFETIME)):3600)),COOKIE_PATH,COOKIE_DOMAIN,1);
  153. } else {
  154. if(!$this->security_enabled)
  155. session_set_cookie_params(time()+((defined('COOKIE_LIFETIME')?(60*60*((1/60)*COOKIE_LIFETIME)):3600)),COOKIE_PATH,COOKIE_DOMAIN);
  156. }
  157. } else {
  158. if(!$this->security_enabled)
  159. session_set_cookie_params(time()+((defined('COOKIE_LIFETIME')?(60*60*((1/60)*COOKIE_LIFETIME)):3600)),COOKIE_PATH);
  160. }
  161. if(!session_start()) die('Cannot start session');
  162. } else if(!session_start()) die('Cannot start session');
  163. } else $this->sess_name = (defined('SESS_NAME')?SESS_NAME:$this->sess_name);
  164. $cookie = $this->_getCookie($this->sess_name); // get PHPSESSID md5 string
  165. if(!empty($cookie)) $this->id = $cookie; else $this->id = session_id();
  166. if($this->security_enabled) output_add_rewrite_var($this->sess_name,$this->id);
  167. if(!USE_PHP_DEFAULT_HANDLER) {
  168. if(empty($cookie)&&($this->type==SESS_TYPE_FILE)) $this->generate_id();
  169. else $this->sess_file = $this->directory."/sess_".$cookie;
  170. }
  171. if(!empty($cookie)&&($this->type==SESS_TYPE_FILE)) $GLOBALS[$this->_varname] = $this->_getRegisteredSessions();
  172. /*if ($this->type==SESS_DB)
  173. // not defined yet
  174. }*/
  175. if(!defined("SESSION_STARTED")) define("SESSION_STARTED",true); // LOADED FLAG
  176. }
  177. function register($name) {
  178. $cookie = $this->_getCookie($this->sess_name);
  179. if(empty($cookie)) {
  180. if(!$this->security_enabled) {
  181. if (PHPVERSION<4.01) {
  182. echo '<b>Notice:</b> Session is not yet started.';
  183. }
  184. else if (PHPVERSION>4.01) {
  185. trigger_error("Session is not yet started.",E_USER_NOTICE);
  186. }
  187. } else {
  188. if($this->type==SESS_TYPE_PHP) {
  189. $GLOBALS[$this->_varname][$name] = $GLOBALS[$name];
  190. }
  191. }
  192. } else {
  193. if(is_string($name)) {
  194. if($this->type==SESS_TYPE_FILE) {
  195. if(file_exists($this->sess_file)) unlink($this->sess_file);
  196. $fid = fopen($this->directory."/sess_".$this->_getCookie($this->sess_name),"w");
  197. if(!$fid) return false;
  198. fclose($fid);
  199. $this->sess_file = $this->directory."/sess_".$this->_getCookie($this->sess_name);
  200. chmod($this->sess_file,0777);
  201. }
  202. if(isset($GLOBALS[$this->_varname][$name])) unset($GLOBALS[$this->_varname][$name]);
  203. $GLOBALS[$this->_varname][$name] = $GLOBALS[$name];
  204. } else if(is_array($name)) {
  205. while(list($k,$v)=each($name)) {
  206. if(isset($GLOBALS[$this->_varname][$k])) unset($GLOBALS[$this->_varname][$k]);
  207. $GLOBALS[$this->_varname][$k] = $v;
  208. }
  209. } else if(is_object($name)) {
  210. if(PHPVERSION<4.01) {
  211. echo '<b>Notice:</b> Parameter Object only available for PHP 4 or later';
  212. } else {
  213. $data = get_object_vars($name);
  214. if(count($data)>0) {
  215. while(list($k,$v)=each($data)) {
  216. if(isset($GLOBALS[$this->_varname][$k])) unset($GLOBALS[$this->_varname][$k]);
  217. $GLOBALS[$this->_varname][$k] = $v;
  218. }
  219. }
  220. }
  221. }
  222. }
  223. if($this->type==SESS_TYPE_FILE) $this->_write($this->sess_file);
  224. }
  225. function unregister($name) {
  226. if(isset($GLOBALS[$this->_varname][$name])) unset($GLOBALS[$this->_varname][$name]);
  227. }
  228. function vars($name) {
  229. if(isset($GLOBALS[$this->_varname][$name])) return $GLOBALS[$this->_varname][$name]; else return null;
  230. }
  231. function id($str='') {
  232. if(empty($str)) {
  233. return $this->_getCookie($this->sess_name);
  234. } else {
  235. setcookie($this->sess_name,$str);
  236. if($this->type==SESS_TYPE_FILE) {
  237. $fid = fopen($this->directory."/sess_".$str,"w");
  238. fclose($fid);
  239. if(file_exists($this->sess_file)) unlink($this->sess_file);
  240. $this->sess_file = $this->directory."/sess_".$str;
  241. }
  242. }
  243. }
  244. function destroy() {
  245. $this->_unset();
  246. if(isset($GLOBALS[$this->_varname])) unset($GLOBALS[$this->_varname]);
  247. if($this->type==SESS_TYPE_FILE) {
  248. if(file_exists($this->sess_file)) {
  249. unlink($this->sess_file);
  250. }
  251. }
  252. }
  253. function is_registered($name) {
  254. $data = $this->_getRegisteredSessions();
  255. if(isset($data[$name])) return true; else return false;
  256. }
  257. function _unset() {
  258. if(($this->type==SESS_TYPE_PHP)&&(USE_PHP_DEFAULT_HANDLER)) {
  259. if(count($GLOBALS[$this->_varname])>0) {
  260. unset($GLOBALS[$this->_varname]);
  261. }
  262. session_destroy();
  263. } else {
  264. if(!USE_PHP_DEFAULT_HANDLER)
  265. if($this->_getCookie($this->sess_name)!='') setcookie($this->sess_name,'',time()-7200);
  266. }
  267. }
  268. function generate_id() {
  269. $id = $this->_generate_id();
  270. if(!defined('COOKIE_LIFETIME')) define('COOKIE_LIFETIME',5);
  271. if(!defined('COOKIE_PATH')) define('COOKIE_PATH','/');
  272. if(defined('COOKIE_DOMAIN')&&trim(COOKIE_DOMAIN)!='') {
  273. if(defined('COOKIE_SECURE')&&COOKIE_SECURE!=0) {
  274. if(!setcookie($this->sess_name,$id,time()+((defined('COOKIE_LIFETIME')?(60*60*((1/60)*COOKIE_LIFETIME)):3600)),COOKIE_PATH,COOKIE_DOMAIN,1)) echo('<b>Could not send cookies to browser</b>');
  275. //header("Set-Cookie: {$this->sess_name}={$id}; expires=".gmdate("M d Y H:i:s", time()+(60*60*((1/60)*COOKIE_LIFETIME)))." GMT; path=".COOKIE_PATH."; domain=".COOKIE_DOMAIN."; secure");
  276. if (PHPVERSION<4.10) $GLOBALS['HTTP_COOKIE_VARS'] = array($this->sess_name=>$id);
  277. else $GLOBALS['_COOKIE'] = array($this->sess_name=>$id);
  278. //Set-Cookie: cookie[tiga]=cookieone; expires=Sun, 18-Feb-2007 17:26:51 GMT; path=/UAM_Server/; domain=192.168.1.236; secure
  279. //setcookie($this->sess_name,$this->_generate_id(),time()+(60*60*((1/60)*COOKIE_LIFETIME)),COOKIE_PATH,COOKIE_DOMAIN,1);
  280. } else {
  281. //header("Set-Cookie: {$this->sess_name}={$id}; expires=".gmdate("M d Y H:i:s", time()+(60*60*((1/60)*COOKIE_LIFETIME)))." GMT; path=".COOKIE_PATH."; domain=".COOKIE_DOMAIN.";");
  282. if(!setcookie($this->sess_name,$id,time()+((defined('COOKIE_LIFETIME')?(60*60*((1/60)*COOKIE_LIFETIME)):3600)),COOKIE_PATH,COOKIE_DOMAIN)) echo('<b>Could not send cookies to browser</b>');
  283. if (PHPVERSION<4.10) $GLOBALS['HTTP_COOKIE_VARS'] = array($this->sess_name=>$id);
  284. else $GLOBALS['_COOKIE'] = array($this->sess_name=>$id);
  285. //setcookie($this->sess_name,$this->_generate_id(),time()+(60*60*((1/60)*COOKIE_LIFETIME)),COOKIE_PATH,COOKIE_DOMAIN);
  286. }
  287. } else {
  288. //header("Set-Cookie: {$this->sess_name}={$id}; expires=".gmdate("M d Y H:i:s", time()+(60*60*((1/60)*COOKIE_LIFETIME)))." GMT; path=".COOKIE_PATH);
  289. if(!setcookie($this->sess_name,$id,time()+((defined('COOKIE_LIFETIME')?(60*60*((1/60)*COOKIE_LIFETIME)):3600)),COOKIE_PATH)) echo('<b>Could not send cookies to browser</b>');
  290. if (PHPVERSION<4.10) $GLOBALS['HTTP_COOKIE_VARS'] = array($this->sess_name=>$id);
  291. else $GLOBALS['_COOKIE'] = array($this->sess_name=>$id);//D, d-M-Y H:i:s
  292. //if(!setcookie($this->sess_name,$this->_generate_id(),time()+(60*60*((1/60)*COOKIE_LIFETIME)),COOKIE_PATH)) die('Web Browser cannot accept cookie');
  293. }
  294. if($this->type==SESS_TYPE_FILE) {
  295. /*$fid = fopen($this->directory."/sess_".$this->id,"w");
  296. if(!$fid) return false;
  297. fclose($fid);*/
  298. if(file_exists($this->sess_file)) unlink($this->sess_file);
  299. $this->sess_file = $this->directory."/sess_".$this->id;
  300. }
  301. return true;
  302. }
  303. function _getCookie($name) {
  304. if (PHPVERSION<4.10) {
  305. if(isset($GLOBALS['HTTP_COOKIE_VARS'][$name])) return $GLOBALS['HTTP_COOKIE_VARS'][$name]; else return;
  306. } else {
  307. if(isset($GLOBALS['_COOKIE'][$name])) return $GLOBALS['_COOKIE'][$name]; else return;
  308. }
  309. }
  310. function _getRegisteredSessions() {
  311. if($this->type==SESS_TYPE_FILE&&file_exists($this->sess_file)) {
  312. return unserialize(file_get_contents($this->sess_file));
  313. } else if($this->type==SESS_TYPE_PHP) {
  314. return (isset($GLOBALS[$this->_varname]))?$GLOBALS[$this->_varname]:"";
  315. }
  316. }
  317. function _generate_id() {
  318. $this->id = md5(microtime().getenv('HTTP_ACCEPT_CHARSET').getenv('HTTP_ACCEPT_ENCODING').getenv('HTTP_ACCEPT_LANGUAGE').getenv('REMOTE_ADDR').getenv('HTTP_USER_AGENT').getenv('REMOTE_HOST').getenv('REMOTE_PORT'));
  319. return $this->id;
  320. }
  321. function _write($filename) {
  322. if($this->type==SESS_TYPE_FILE) {
  323. if(file_exists($filename)) $data = unserialize(file_get_contents($filename));
  324. }
  325. if(!isset($GLOBALS[$this->_varname])||!is_array($GLOBALS[$this->_varname])) {
  326. if (PHPVERSION<4.01) {
  327. echo '<b>WARNING:</b> Wrong type of session variables or array variables needed';
  328. }
  329. else if (PHPVERSION>4.01) {
  330. trigger_error('Wrong type of session variables or array variables needed',E_USER_WARNING);
  331. }
  332. }
  333. if(isset($data)) {
  334. while(list($k,$v)=each($GLOBALS[$this->_varname])) {
  335. $data[$k] = $v;
  336. }
  337. }
  338. if(($this->type==SESS_TYPE_FILE)&&(!USE_PHP_DEFAULT_HANDLER)) {
  339. $fp = fopen($filename,"w");
  340. if($fp) {
  341. fwrite($fp,serialize($GLOBALS[$this->_varname]));
  342. fclose($fp);
  343. } else {
  344. if (PHPVERSION<4.01) {
  345. die('Unable to write onto session file, write permission denied');
  346. }
  347. else if (PHPVERSION>4.01) {
  348. trigger_error('Unable to write onto session file, write permission denied',E_USER_ERROR);
  349. }
  350. }
  351. }
  352. }
  353. }
  354. ?>