現在PHPとPEAR AUTHで認証システムを作成しています。

PEAR AUTHでは特になにもしないと同じIDとパスを使用して同時に複数ログインできてしまいますが
一つのID、パスワードでは同時に一人しかログインできないようにしたいのですがどのようにしたらよいでしょうか

サンプルソースなど示していただけると助かります
一番参考になった回答をいただけた方に150p差し上げます

回答の条件
  • 1人2回まで
  • 登録:2007/06/11 12:39:53
  • 終了:2007/06/16 06:01:33

回答(1件)

id:t_shiono No.1

t_shiono回答回数256ベストアンサー獲得回数222007/06/11 16:16:10

ポイント60pt

flockの排他制御+セッションとファイルのチェックでどうでしょうか?

以下の感じです。

$lockDir = "ロックファイルディレクトリ";
$a = new Auth( ・・・ );
$a->start();
if ($a->getAuth()) {
  認証エラー
}

$key = NULL;

$lock = $lockDir . $a->getAuthData("ID");
$fp = fopen($lock, "r+");
if (!flock($fp, LOCK_EX)) {
  $key = fread($fp, 128)
  if (strlen($key) == 0) { // 誰もログインしていない
     $key = キー文字列生成
     fwrite($fp, $key);
    $_SESSION['key'] = $key;
  }
}
 
flock($fp, LOCK_UN);
fclose($fp);

if ($key == $_SESSION['key']) {
  正常ログイン時の処理
} else {
 他のユーザログイン時の処理
}

ただし、この方法では、正しくログアウトしないと、他の人がログインできなくなります。また、ログアウト時には、ロックファイルの中を空にします。

id:jayz

ご回答ありがとうございます

あまり実用的ではなさそうですね・・

2007/06/16 06:01:10

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません