이번 강의에서는 웹 애플리케이션에서 사용자 정보를 저장하고 관리하기 위한 두 가지 주요 방법인 세션과 쿠키에 대해 다룹니다. 또한, 사용자 인증을 구현하는 방법과 보안 고려사항에 대해서도 살펴봅니다.
1. 세션의 개념 및 사용 방법
1-1. 세션의 개념
· 세션은 서버 측에서 사용자 정보를 저장하는 방법입니다.
· 클라이언트는 세션 ID를 쿠키를 통해 서버에 전송하고, 서버는 이 세션 ID를 사용하여 관련된 데이터를 검색합니다.
1-2. 세션 시작
세션을 사용하기 위해서는 먼저 session_start() 함수를 호출하여 세션을 시작해야 합니다.
<?php
// 세션 시작
session_start();
?>
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 '잘못된 사용자명 또는 비밀번호';
}
}
?>
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();
?>
- 이전 수업 목록
'프로그래밍 > PHP' 카테고리의 다른 글
[PHP 수업] 13강 - 데이터베이스 연동 (MySQL) (0) | 2024.08.12 |
---|---|
[PHP 수업] 12강 - 파일 처리 (0) | 2024.08.09 |
[PHP 수업] 10강 - 폼 처리 및 유효성 검사 (0) | 2024.08.07 |
[PHP 수업] 9강 - 문자열 처리 (0) | 2024.08.06 |
[PHP 수업] 8강 - 배열 (0) | 2024.08.05 |