PageRenderTime 27ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/Upload/DoYouHaoBaby/LibPHP/App/Advance/Auth/Session.class.php

http://dyhb-frame.googlecode.com/
PHP | 297 lines | 253 code | 42 blank | 2 comment | 39 complexity | a729fc958fc6635c1b397b9b3056dbcd MD5 | raw file
  1. <?php
  2. /* [DoYouHaoBaby!] (C)Dianniu From 2010.
  3. ? PHP ??Session ??????($)*/
  4. !defined('DYHB_PATH') && exit;
  5. define("HTTP_SESSION_STARTED",1);
  6. define("HTTP_SESSION_CONTINUED",2);
  7. class Session{
  8. static private $_oGlobalInstance;
  9. static protected $_nExpireSec;
  10. static protected $_sSessionKey;
  11. static protected $_sSessionPath;
  12. static protected $_sCookidDomain;
  13. static protected $_SesssionCallback;
  14. static protected $_sSessionPrefix;
  15. static public function startSession($nExpireSec=900,$sSessionKey=null,$sSessionPrefix=null,$sSessionPath=null,$sCookidDomain=null,$SesssionCallback=null) {
  16. self::$_nExpireSec=$nExpireSec;
  17. self::$_sSessionKey=$sSessionKey;
  18. self::$_sSessionPrefix=$sSessionPrefix;
  19. self::$_sSessionPath=$sSessionPath;
  20. self::$_sCookidDomain=$sCookidDomain;
  21. self::$_SesssionCallback=$SesssionCallback;
  22. if(!isset($_SESSION)){
  23. $this->init_();
  24. if(!$this->start()){
  25. return null;
  26. }
  27. }
  28. if(!self::$_oGlobalInstance){
  29. self::$_oGlobalInstance=new Session();
  30. }
  31. return self::$_oGlobalInstance;
  32. }
  33. private function init_(){
  34. ini_set('session.auto_start',0);// ??session?????
  35. if(is_null($this->detectId())) {
  36. $this->id(uniqid(dechex(mt_rand())));
  37. }
  38. $this->setCookieDomain(self::$_sCookidDomain);// ??Session????
  39. $this->localName(APP_NAME);// ????????????Session???
  40. $this->name(self::$_sSessionKey);
  41. $this->path(self::$_sSessionPath);
  42. $this->setCallback(self::$_SesssionCallback);
  43. }
  44. private function start(){
  45. if(!session_start()){
  46. return null;
  47. }
  48. if(!isset($_SESSION['__HTTP_Session_Info'])) {
  49. $_SESSION['__HTTP_Session_Info']=HTTP_SESSION_STARTED;
  50. }
  51. else{
  52. $_SESSION['__HTTP_Session_Info']=HTTP_SESSION_CONTINUED;
  53. }
  54. $this->setExpire(self::$_nExpireSec);
  55. }
  56. private function session(){}
  57. public function getSessionKey(){
  58. return session_id();
  59. }
  60. public function setVariable($sVarName, $Value=null){
  61. if($Value===null){
  62. unset($_SESSION[self::$_sSessionPrefix.$sVarName]);
  63. return;
  64. }
  65. $sOldValue=isset($_SESSION[self::$_sSessionPrefix.$sVarName])? $_SESSION[self::$_sSessionPrefix.$sVarName]:null;
  66. $_SESSION[self::$_sSessionPrefix.$sVarName]=$Value;
  67. return $sOldValue;
  68. }
  69. public function getVariable($sVarName){
  70. return isset($_SESSION[self::$_sSessionPrefix.$sVarName])?$_SESSION[self::$_sSessionPrefix.$sVarName ]:null;
  71. }
  72. public function &getVariableRef($sVarName){
  73. return isset($_SESSION[ self::$_sSessionPrefix.$sVarName ])? $_SESSION[ self::$_sSessionPrefix.$sVarName ]: null;
  74. }
  75. public function deleteVariable($sVarName){
  76. return session_unregister(self::$_sSessionPrefix.$sVarName);
  77. }
  78. public function issetVariable($sVarName){
  79. return isset($_SESSION[self::$_sSessionPrefix.$sVarName] );
  80. }
  81. public function clearVariable(){
  82. $_SESSION=array();
  83. }
  84. public function destroy(){
  85. session_destroy();
  86. }
  87. public function pause(){
  88. session_write_close();
  89. }
  90. public function terminateSession(){
  91. $this->clearVariable();
  92. if(isset($_COOKIE[session_name()])){
  93. setcookie(session_name(),'',time()-42000,'/');
  94. }
  95. $this->destroy();
  96. }
  97. public function clearLocal(){
  98. $local=$this->localName();
  99. unset($_SESSION[$local]);
  100. }
  101. public function detectId(){
  102. if(session_id()!=''){
  103. return session_id();
  104. }
  105. if($this->useCookies()) {
  106. if(isset($_COOKIE[$this->name()])){
  107. return $_COOKIE[$this->name()];
  108. }
  109. }
  110. else{
  111. if(isset($_GET[$this->name()])){
  112. return $_GET[$this->name()];
  113. }
  114. if(isset($_POST[$this->name()])){
  115. return $_POST[$this->name()];
  116. }
  117. }
  118. return null;
  119. }
  120. public function name($sName=null){
  121. return isset($sName)?session_name($sName):session_name();
  122. }
  123. public function id($sid=null){
  124. return isset($sid)?session_id($sid):session_id();
  125. }
  126. public function path($sPath=null){
  127. return !empty($sPath)?session_save_path($sPath):session_save_path();
  128. }
  129. public function setExpire($nTime, $bAdd=false){
  130. if($bAdd){
  131. if(!isset($_SESSION['__HTTP_Session_Expire_TS'])) {
  132. $_SESSION['__HTTP_Session_Expire_TS']=CURRENT_TIMESTAMP + $nTime;
  133. }
  134. $nCurrentGcMaxLifetime=$this->setGcMaxLifetime(null);// ??session.gc_maxlifetime
  135. $this->setGcMaxLifetime($nCurrentGcMaxLifetime + $nTime);
  136. }
  137. elseif(!isset($_SESSION['__HTTP_Session_Expire_TS'])) {
  138. $_SESSION['__HTTP_Session_Expire_TS']=$nTime;
  139. }
  140. }
  141. public function setIdle($nTime, $bAdd=false){
  142. if($bAdd){
  143. $_SESSION['__HTTP_Session_Idle']=$nTime;
  144. }
  145. else{
  146. $_SESSION['__HTTP_Session_Idle']=$nTime-CURRENT_TIMESTAMP;
  147. }
  148. }
  149. public function sessionValidThru(){
  150. if(!isset($_SESSION['__HTTP_Session_Idle_TS']) || !isset($_SESSION['__HTTP_Session_Idle'])) {
  151. return 0;
  152. }
  153. else{
  154. return $_SESSION['__HTTP_Session_Idle_TS'] + $_SESSION['__HTTP_Session_Idle'];
  155. }
  156. }
  157. public function isExpired(){
  158. if(isset($_SESSION['__HTTP_Session_Expire_TS']) && $_SESSION['__HTTP_Session_Expire_TS'] < CURRENT_TIMESTAMP) {
  159. return true;
  160. }
  161. else{
  162. return false;
  163. }
  164. }
  165. public function isIdle(){
  166. if(isset($_SESSION['__HTTP_Session_Idle_TS']) &&(($_SESSION['__HTTP_Session_Idle_TS'] + $_SESSION['__HTTP_Session_Idle']) < CURRENT_TIMESTAMP)) {
  167. return true;
  168. }
  169. else {
  170. return false;
  171. }
  172. }
  173. public function updateIdle(){
  174. $_SESSION['__HTTP_Session_Idle_TS']=CURRENT_TIMESTAMP;
  175. }
  176. public function setCallback($Callback=null){
  177. $return=ini_get('unserialize_callback_func');
  178. if(!empty($Callback)) {
  179. ini_set('unserialize_callback_func',$Callback);
  180. }
  181. return $return;
  182. }
  183. public function isNew(){
  184. return !isset($_SESSION['__HTTP_Session_Info']) || $_SESSION['__HTTP_Session_Info']==HTTP_SESSION_STARTED;
  185. }
  186. public function getLocal($sName){
  187. $sLocal=$this->localName();
  188. if(!is_array($_SESSION[$sLocal])) {
  189. $_SESSION[$sLocal]=array();
  190. }
  191. return $_SESSION[$sLocal][$sName];
  192. }
  193. public function setLocal($sName,$Value){
  194. $sLocal=$this->localName();
  195. if(!is_array($_SESSION[$sLocal])) {
  196. $_SESSION[$sLocal]=array();
  197. }
  198. if(null===$Value) {
  199. unset($_SESSION[$sLocal][$sName]);
  200. }
  201. else{
  202. $_SESSION[$sLocal][$sName]=$Value;
  203. }
  204. return;
  205. }
  206. public function isSetLocal($sName){
  207. $sLocal=$this->localName();
  208. return isset($_SESSION[$sLocal][$sName]);
  209. }
  210. public function localName($sName=null){
  211. $sReturn=(isset($GLOBALS['__HTTP_Session_Localname']))?$GLOBALS['__HTTP_Session_Localname']:null;
  212. if(!empty($sName)) {
  213. $GLOBALS['__HTTP_Session_Localname']=md5($sName);
  214. }
  215. return $sReturn;
  216. }
  217. public function getFilename(){
  218. return $this->path().'/sess_'.session_id();
  219. }
  220. public function setCookieDomain($sSessionDomain=null){
  221. $sReturn=ini_get('session.cookie_domain');
  222. if(!empty($sSessionDomain)){
  223. ini_set('session.cookie_domain',$sSessionDomain);// ????Session
  224. }
  225. return $sReturn;
  226. }
  227. public function useCookies($bUseCookies=null) {
  228. $nReturn=ini_get('session.use_cookies')?true : false;
  229. if(isset($bUseCookies)) {
  230. ini_set('session.use_cookies',$bUseCookies?1:0);
  231. }
  232. return $nReturn;
  233. }
  234. public function useTransSid($nUseTransSid=null){
  235. $nReturn=ini_get('session.use_trans_sid')?true : false;
  236. if(isset($nUseTransSid)){
  237. ini_set('session.use_trans_sid',$nUseTransSid?1:0);
  238. }
  239. return $nReturn;
  240. }
  241. public function setGcMaxLifetime($nGcMaxlifetime=null){
  242. $nReturn=ini_get('session.gc_maxlifetime');
  243. if(isset($nGcMaxlifetime) && is_int($nGcMaxlifetime) && $nGcMaxlifetime >= 1){
  244. ini_set('session.gc_maxlifetime',$nGcMaxlifetime);
  245. }
  246. return $nReturn;
  247. }
  248. public function setGcProbability($nGcProbability=null){
  249. $nReturn=ini_get('session.gc_probability');
  250. if(isset($nGcProbability) && is_int($nGcProbability) && $nGcProbability >= 1 && $nGcProbability<=100) {
  251. ini_set('session.gc_probability',$nGcProbability);
  252. }
  253. return $nReturn;
  254. }
  255. }