PHP 使用MySQL管理Session的回调函数详解

复制代码 代码如下:

  <?php

  class MySession extends DBSQL {

  /**

  * __construct()

  */

  public function __construct() {

  parent::__construct ();

  }

  /**

  * open()

  *

  * @param <String> $sSavePath

  * @param <String>$sSessionNames

  *

  * @return <Boolean> true

  */

  public function open($sSavePath, $sSessionName) {

  return true;

  }

  /**

  * close()

  */

  public function close() {

  return true;

  }

  /**

  * read()

  *

  * @param <String> $sSessionId

  * @return <String> Session data or null on error...

  */

  public function read($sSessionId) {

  $sSessionId = addslashes(trim($sSessionId));

  $sSql = "SELECT * FROM tb_session WHERE F_SessionId = '{$sSessionId}'";

  //echo $sSql;

  if(false != ($result = $this->select($sSql))) {

  //var_dump($result[0]['F_SessionData']);

  return $result[0]['F_SessionData'];

  } else {

  return '';

  }

  }

  /**

  * write()

  *

  * @param <String> $SessionId

  * @param <String> $sSessionData

  *

  * @return <Boolean> true or false

  */

  public function write($sSessionId, $sSessionData) {

  $arrSession = array();

  $arrSession['F_SessionId'] = addslashes(trim($sSessionId));

  $arrSession['F_SessionData'] = addslashes($sSessionData);

  $arrSession['F_SessionCreated'] = date("Y-m-d H:i:s");

  $arrSession['F_SessionUpdated'] = date("Y-m-d H:i:s", time() + 1440);

  // 新session及更新的session

  if (false != ($result = $this->insertData('tb_session', $arrSession))) {

  return true;

  } else {

  $arrUpdateSession = array();

  $arrUpdateSession['F_SessionData'] = addslashes($sSessionData);

  $arrUpdateSession['F_SessionUpdated'] = date("Y-m-d H:i:s", time() + 1440);

  if (false != ($result = $this->updateData('tb_session', "'".addslashes($sSessionId)."'", 'F_SessionId', $arrUpdateSession))) {

  return true;

  } else {

  return false;

  }

  }

  }

  /**

  * destroy()

  *

  * @param <String> $sSessionId

  * @return <Boolean> true

  */

  public function destroy($sSessionId) {

  $sSessionId = addslashes(trim($sSessionId));

  $this->delData($sSessionId, 'F_SessionId', 'tb_session');

  return true;

  }

  /**

  * gc

  *

  * @param <int> $nMaxLifeTime seconds

  *

  * @return <Boolean> true

  */

  public function gc($nMaxLifeTime) {

  $dtExpiredTime = date("Y-m-d H:i:s", time() - $nMaxLifeTime);

  $sSql = "DELETE FROM tb_session WHERE F_SessionUpdated < {$dtExpiredTime}";

  //echo $sSql;

  $this->delete($sSql);

  return true;

  }

  /**

  * __desctruct()

  *

  */

  function __destruct() {

  // ensure session data is written out before classes are destroyed

  // (see http://bugs.php.net/bug.php?id=33772 for details)

  @session_write_close();

  } // __destruct

  }

  ?>