프로그래밍/PHP

[PHP 수업] 11강 - 세션과 쿠키

월횽 2024. 8. 8. 06:30
728x90
반응형
SMALL

이번 강의에서는 웹 애플리케이션에서 사용자 정보를 저장하고 관리하기 위한 두 가지 주요 방법인 세션과 쿠키에 대해 다룹니다. 또한, 사용자 인증을 구현하는 방법과 보안 고려사항에 대해서도 살펴봅니다.

 

 

1. 세션의 개념 및 사용 방법

 

1-1. 세션의 개념

· 세션은 서버 측에서 사용자 정보를 저장하는 방법입니다.
· 클라이언트는 세션 ID를 쿠키를 통해 서버에 전송하고, 서버는 이 세션 ID를 사용하여 관련된 데이터를 검색합니다.

 

1-2. 세션 시작

세션을 사용하기 위해서는 먼저 session_start() 함수를 호출하여 세션을 시작해야 합니다.

<?php
// 세션 시작
session_start();
?>

 

728x90

1-3. 세션 데이터 저장

세션 변수는 $_SESSION 슈퍼글로벌 배열을 사용하여 저장할 수 있습니다.

<?php
// 세션 시작
session_start();

// 세션 데이터 저장
$_SESSION['username'] = 'JohnDoe';
$_SESSION['email'] = 'john.doe@example.com';
?>

 

 

1-4. 세션 데이터 읽기

세션 변수에 저장된 데이터는 $_SESSION 배열을 통해 읽을 수 있습니다.

<?php
// 세션 시작
session_start();

// 세션 데이터 읽기
echo 'Username: ' . $_SESSION['username'];
echo 'Email: ' . $_SESSION['email'];
?>

 

1-5. 세션 종료

세션을 종료하고 세션 데이터를 제거하려면 session_destroy() 함수를 사용합니다. 이 함수는 세션 데이터를 제거하고, $_SESSION 배열을 비웁니다.

<?php
// 세션 시작
session_start();

// 세션 데이터 삭제
session_unset();

// 세션 종료
session_destroy();
?>

 

 

 

2. 쿠키의 개념 및 사용 방법

 

2-1. 쿠키의 개념

· 쿠키는 클라이언트 측에서 데이터를 저장하는 방법입니다.
· 쿠키는 이름, 값, 만료 시간, 경로 등을 설정할 수 있으며, 클라이언트가 서버로 전송할 때마다 서버로 함께 전송됩니다.

 

2-2. 쿠키 설정

· setcookie() 함수를 사용하여 쿠키를 설정할 수 있습니다. 쿠키는 클라이언트의 브라우저에 저장됩니다.

<?php
// 쿠키 설정
setcookie('username', 'JohnDoe', time() + 3600, '/'); // 1시간 동안 유효
?>
반응형

2-3. 쿠키 읽기

쿠키에 저장된 데이터는 $_COOKIE 배열을 통해 읽을 수 있습니다.

<?php
// 쿠키 읽기
if (isset($_COOKIE['username'])) {
    echo 'Username: ' . $_COOKIE['username'];
} else {
    echo '쿠키가 설정되어 있지 않습니다.';
}
?>

 

2-4 쿠키 삭제

쿠키를 삭제하려면 만료 시간을 과거로 설정하면 됩니다.

<?php
// 쿠키 삭제
setcookie('username', '', time() - 3600, '/');
?>

 

 

3. 세션과 쿠키를 활용한 사용자 인증

 

3-1. 사용자 로그인 및 세션 사용

로그인 시, 사용자 정보를 세션에 저장하여 인증된 사용자로 식별합니다.

<?php
// login.php
session_start();

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // 로그인 검증 로직 (예: 데이터베이스와 비교)
    if ($username == 'JohnDoe' && $password == 'password123') {
        $_SESSION['loggedin'] = true;
        $_SESSION['username'] = $username;
        header('Location: welcome.php');
        exit();
    } else {
        echo '잘못된 사용자명 또는 비밀번호';
    }
}
?>
SMALL

3-2. 로그인 상태 확인

사용자가 인증된 상태인지 확인하여 접근을 제어합니다.

<?php
// welcome.php
session_start();

if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
    header('Location: login.php');
    exit();
}

echo '환영합니다, ' . $_SESSION['username'];
?>

 

 

 

4. 보안 고려사항 (세션 하이재킹 방지)

 

4.1 세션 하이재킹

· 세션 하이재킹은 공격자가 다른 사용자의 세션 ID를 탈취하여 사용자의 세션을 도용하는 공격입니다.

 

4.2 보안 대책

· 세션 ID 고정 방지: 매 요청마다 새로운 세션 ID를 생성하여 세션 하이재킹을 방지합니다.

<?php
session_start();
session_regenerate_id(true); // 새로운 세션 ID 생성
?>

· 세션 쿠키 속성 설정: 쿠키 속성을 설정하여 보안을 강화합니다.

<?php
// Secure 플래그를 사용하여 HTTPS에서만 쿠키를 전송하도록 설정
// HttpOnly 플래그를 사용하여 자바스크립트에서 쿠키에 접근할 수 없도록 설정
session_set_cookie_params([
    'lifetime' => 3600,
    'path' => '/',
    'domain' => '', // 도메인 설정
    'secure' => true,
    'httponly' => true,
    'samesite' => 'Strict'
]);
session_start();
?>

 

· 세션 타임아웃 설정: 세션의 유효 기간을 설정하여 일정 시간 후 자동으로 로그아웃되도록 합니다.

<?php
session_start();
$timeout = 3600; // 1시간
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY']) > $timeout) {
    session_unset();
    session_destroy();
}
$_SESSION['LAST_ACTIVITY'] = time();
?>

 

 

- 이전 수업 목록

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST