ですね。ただし、手動ですべてを行う場合は、実際には$_SESSION
を実装するだけで、すでにすべてのことを行うことができます。
データベースを使用してセッションを処理する場合は、デフォルトのセッション処理を独自にオーバーライドできます。 session_set_save_handler()を見てください。私は私のアプリでこれを行う。
class SessionHandler
{
public function open($save_path, $session_name)
{
$this->sessionName = $session_name;
return(true);
}
public function close() {
//stuff
}
public function read($id) {
$expiretime = date("Y-m-d H:i:s",time() - $this->maxLifeTime);
$sql = "SELECT * FROM sessions where sessionid='".$this->db->escapeData($id)."' AND lastupdated>='".$expiretime."' LIMIT 1";
$result = $this->db->query($sql);
//etc.
}
//etc.
public function setAsSessionHandler()
{
session_set_save_handler(
array($this,'open'),
array($this,'close'),
array($this,'read'),
array($this,'write'),
array($this,'destroy'),
array($this,'gc')
);
}
}
$sessionHandler = new SessionHandler();
$sessionHandler->setAsSessionHandler();
あなたはちょうどあなたがこれを使って、自分自身を実装しましたことを説明したが、それでもあなたのためにそれを行うには$ _SESSIONの力を持っているすべての機能を持つことができます。
たとえば、セッションを開始する前にセッションがまだ有効かどうかを確認するためにIPチェックを追加する場合は、そのセッションを「開く」機能の一部として追加できます。セッションデータを10種類の異なるデータベースに書きたい場合は、「書き込み」機能でこれを行うことができます。
これらの関数はすべて、$ _SESSIONの使い方に基づいて使用され、単純なクラスに入れておくことで、非常に効果的に動作するように管理できます。
セッションIDは、読み取り/書き込み/破壊関数に渡されるパラメータであり、GUID生成ルーチンを使用して同様に管理します。しかし、あなたはguid生成とチェックをこのセッションマネージャクラスに張り付けることができ、open()関数で単純に行うことができます。中央集中型、マッスルなし、大騒ぎなし。
あなたはホイールを私の友人 –