現在の位置: ホーム> 最新記事一覧> PHPシングルユーザーログイン制限実装方法とコードの例

PHPシングルユーザーログイン制限実装方法とコードの例

M66 2025-07-28

PHPシングルユーザーログイン制限の要件を実装します

ウェブサイトまたはアプリケーションの開発中に、多くの場合、ユーザーのアカウントを1つのデバイスにのみログインして、複数の人が同時に使用するのを防ぐことができるようにする必要があります。シングルユーザーログイン制限の実装は、アカウントのセキュリティを確保するだけでなく、ユーザーセッションを効果的に管理することもできます。この記事では、特定のコード例を組み合わせて、この機能をPHPで完了する方法を紹介します。

データベース設計

まず、ユーザーセッション情報を保存するためのデータテーブルを設計する必要があります。 user_sessionsというテーブルを作成して、ユーザーID、セッションID、ログイン時間を保存できます。テーブル構造のデザインの例は次のとおりです。

 CREATE TABLE user_sessions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    session_id VARCHAR(255) NOT NULL,
    login_time TIMESTAMP NOT NULL
);

シングルユーザーログイン制限を実装するPHPコード

以下は、シングルユーザーのログイン制限を実装するための中核的なアイデアです。

  • ユーザーがログインすると、一意のセッションIDが生成され、ユーザーIDとセッションIDがuser_sessionsテーブルに保存されます。
  • ユーザーが動作するたびに、現在のセッションIDがデータベースに保存されているものと一致するかどうかを確認します。一致しない場合、ログインページにジャンプします。
  • ユーザーがログアウトしたら、対応するセッションレコードを削除します。

サンプルPHPコードは次のとおりです。

 <?php
session_start();

// データベースに接続します
$dsn = 'mysql:host=localhost;dbname=your_database';
$username = 'your_username';
$password = 'your_password';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);

try {
    $dbh = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    echo 'データベース接続に失敗しました: ' . $e->getMessage();
    exit();
}

// ユーザーログイン
function login($user_id) {
    global $dbh;
    $session_id = session_id();
    $login_time = date('Y-m-d H:i:s');
    
    $stmt = $dbh->prepare('INSERT INTO user_sessions (user_id, session_id, login_time) VALUES (?, ?, ?)');
    $stmt->execute([$user_id, $session_id, $login_time]);
}

// 检查ユーザーログイン状态
function check_login($user_id) {
    global $dbh;
    $session_id = session_id();
    
    $stmt = $dbh->prepare('SELECT * FROM user_sessions WHERE user_id = ? ORDER BY login_time DESC LIMIT 1');
    $stmt->execute([$user_id]);
    $row = $stmt->fetch();
    
    if ($row['session_id'] != $session_id) {
        header('Location: login.php');  // ログインページにジャンプします
        exit();
    }
}

// ユーザーログアウト
function logout($user_id) {
    global $dbh;
    $stmt = $dbh->prepare('DELETE FROM user_sessions WHERE user_id = ?');
    $stmt->execute([$user_id]);
}

// 使用の例
$user_id = 1;
if (isset($_SESSION['user_id'])) {
    check_login($_SESSION['user_id']);
} else {
    login($user_id);
}

// その他の操作
// ...

// ユーザーログアウト
// logout($user_id);

?>

要約します

上記のデータベース設計とPHPコードの例を介して、開発者は基本的なシングルユーザーログイン制限機能を実装して、ユーザーアカウントが同時に1つのデバイスでのみ使用できるようにすることができます。プロジェクトの実際のニーズによれば、関連するロジックをさらに拡張および改善することができます。