當前位置: 首頁> 最新文章列表> PHP單用戶登錄限制實現方法與代碼示例

PHP單用戶登錄限制實現方法與代碼示例

M66 2025-07-28

實現PHP單用戶登錄限制的需求

在網站或應用開發過程中,常常需要確保用戶賬號只能在一個設備上登錄,防止賬號被多人同時使用。實現單用戶登錄限制不僅能保障賬戶安全,也能有效管理用戶會話。本文將結合具體代碼示例,介紹如何用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代碼示例,開發者可以實現基本的單用戶登錄限制功能,確保用戶賬號在同一時間內只能在一個設備上使用。根據項目實際需求,可進一步擴展和完善相關邏輯。