웹 사이트 또는 애플리케이션을 개발하는 동안 여러 사람이 계정을 사용하지 않도록 사용자의 계정을 한 장치에만 로그인 할 수 있는지 확인해야합니다. 단일 사용자 로그인 제한을 구현하면 계정 보안을 보장 할뿐만 아니라 사용자 세션을 효과적으로 관리 할 수 있습니다. 이 기사는 특정 코드 예제를 결합하여 PHP 로이 기능을 완료하는 방법을 소개합니다.
먼저 사용자 세션 정보를 저장하기위한 데이터 테이블을 설계해야합니다. 사용자 ID, 세션 ID 및 로그인 시간을 저장하기 위해 user_sessions 라는 테이블을 만들 수 있습니다. 테이블 구조 설계 예제는 다음과 같습니다.
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 코드는 다음과 같습니다.
<?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 코드 예제를 통해 개발자는 기본 단일 사용자 로그인 제한 기능을 구현하여 사용자 계정을 동시에 한 장치에서만 사용할 수 있도록 할 수 있습니다. 프로젝트의 실제 요구에 따라 관련 논리를 더욱 확장하고 개선 할 수 있습니다.