PHP

[PHP] 동시에 한 PC 에서만 로그인을 제한하는 방법


[PHP] 동시에 한 PC 에서만 로그인을 제한하는 방법


  2023-07-07  598 View 공개

PHP 세션을 이용해 한 PC에서만 로그인이 되도록 하는 방법은 여러가지가 있다.
간단하게는 클라이언트의 IP 주소를 세션에 저장하고 이를 사용자가 로그인할 때마다 확인하는 방법이 있다.
그러나 이 방법은 네트워크 변경, VPN 사용 등의 이유로 IP 주소가 변경될 수 있어 완벽하지 않다.

더 안정적인 방법은 로그인할 때마다 사용자의 세션 ID를 변경하고, 이를 데이터베이스에 저장하는 방법이다.
그런 다음, 사용자가 페이지를 방문할 때마다 세션 ID를 확인한다.
만약 세션 ID가 데이터베이스에 저장된 ID와 일치하지 않으면, 그것은 또 다른 PC에서 로그인이 시도되었음을 의미한다.
이 때, 이전 세션을 무효화하고 새로운 세션을 시작할 수 있다.

아래는 이에 대한 대략적인 코드이다.

PHP
<?php
 
session_start();
 
// DB에 연결
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
 
// 사용자를 검증하는 당신의 로그인 스크립트가 있다고 가정
if (authenticate_user($username, $password)) {
    // 사용자가 인증되면 새로운 세션 ID를 생성하고 저장
    session_regenerate_id();
    $_SESSION['username'] = $username;
 
    // 사용자의 세션 ID를 DB에 저장
    $stmt = $db->prepare('UPDATE users SET session_id = ? WHERE username = ?');
    $stmt->execute([session_id(), $username]);
  }
 
// 사용자가 페이지를 방문할 때마다 세션 ID를 확인
else {
   $stmt = $db->prepare('SELECT session_id FROM users WHERE username = ?');
   $stmt->execute([$_SESSION['username']]);
   $result = $stmt->fetch();
 
   if (session_id() != $result['session_id']) {
       // 다른 PC에서 로그인이 감지되면 현재 세션을 무효화
       session_unset();
       session_destroy();
 
       // 로그인 페이지로 리다이렉트
       header('Location: /login.php');
       exit;
   }
}
 
?>
이 코드는 암호가 이미 검증되었고, 세션 시작 부분과 검증 부분이 적절히 배치되었다는 가정 하에 작성된 것이다.
실제로 이 코드를 사용하려면 자신의 애플리케이션에 맞게 수정해야 한다.

Tags  #php  



🚩 PHP 글 모음 (총 56 건)

[PHP] 공공데이타포탈 XML 자료 파싱하기

Last Updated : 2023-09-30
#XML파싱 #공공데이타포탈

이메일 존재여부 확인

Last Updated : 2023-09-29

[PHP] 30분뒤 자동 로그아웃

Last Updated : 2023-09-29

[PHP] 타임존을 한국시간으로 설정하는 방법

Last Updated : 2023-09-29
#PHP #TIMEZONE

[PHP] 동시에 한 PC 에서만 로그인을 제한하는 방법

Last Updated : 2023-09-29
#php

[PHP] mb_substr 로 한글 문자열을 깨지지 않고 안전하게 분리하기

Last Updated : 2023-09-29
#PHP #mb_substr #한글문자열자르기