ホームページ  >  記事  >  バックエンド開発  >  セッションをデータベースに保存するための PHP クラス共有_PHP チュートリアル

セッションをデータベースに保存するための PHP クラス共有_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:23:181035ブラウズ

复制代码代码如下:

class SessionToDB
{
private $_path = null;
プライベート $_name = null;
プライベート $_pdo = null;
プライベート $_ip = null;
プライベート $_maxLifeTime = 0;

パブリック関数 __construct(PDO $pdo)
{
session_set_save_handler(
array(&$this, 'open'),
array(&$this, 'close'),
array(&$this, 'read') ,
array(&$this, 'write'),
array(&$this, 'destroy'),
array(&$this, 'gc')
);

$this->_pdo = $pdo;
$this->_ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
$this->_maxLifeTime = ini_get('session.gc_maxlifetime');
}

public function open($path,$name)
{
return true;
}

パブリック関数 close()
{
true を返す;
}

public function read($id)
{
$sql = 'SELECT * FROM session where PHPSESSID = ?';
$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array($id));

if (!$result = $stmt->fetch(PDO::FETCH_ASSOC)) {
return null;
} elseif ($this->_ip != $result['client_ip']) {
return null;
} elseif ($result['update_time']+$this->_maxLifeTime < time()){
$this->destroy($id);
null を返します。
} else {
return $result['data'];
}
}

public function write($id,$data)
{
$sql = 'SELECT * FROM session where PHPSESSID = ?';
$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array($id));

if ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
if ($result['data'] != $data) {
$sql = 'UPDATE セッション SET update_time =? 、日付 = ? WHERE PHPSESSID = ?';

$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array(time(), $data, $id));
}
} else {
if (!empty($data)) {
$sql = 'INSERT INTO session (PHPSESSID, update_time, client_ip, data) VALUES (?,?,?,?)';
$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array($id, time(), $this->_ip, $data));
}
}

true を返します。
}

public function destroy($id)
{
$sql = 'DELETE FROM session WHERE PHPSESSID = ?';
$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array($id));

true を返します。
}

public function gc($maxLifeTime)
{
$sql = 'DELETE FROM session WHERE update_time $stmt = $this->_pdo->prepare($sql);
$stmt->execute(array(time() - $maxLifeTime));

true を返します。
}
}

try{
$pdo = 新しい PDO('mysql:host=localhost;dbname=rphp4zf', 'root','rickyfeng');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

新しいSessionToDB($pdo);
} catch(PDOException $e) {
echo 'エラー: '.$e->getMessage();
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/324512.html技術記事例: ?php class SessionToDB { private $_path = null;プライベート $_name = null;プライベート $_pdo = null;プライベート $_ip = null;プライベート $_maxLifeTime = 0;公共の機能...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。