세션은 보안성이 좋다는 장점이 있다. 그러나 세션만 사용하지 않고 쿠키와 병행해 사용하는 이유는 아래와 같다.

$_SESSION["username"] = $username;<?php // 세션 생성
session_start();
print "세션 시작!<p>";
// SESSION의 변수명은 [ ] 안에. 변수명에 할당된 값은 = 이후에 입력.
// SESSION은 전역변수이므로, 다른 문서에서도 여기서 할당한 SESSION을 활용할 수 있음.
$_SESSION['userid'] = "kdhong";
$_SESSION['username'] = "홍길동";
$_SESSION['time'] = time(); // 현재시간
print "3개의 세션 변수 등록 완료. <br>";
print $_SESSION['userid']."<br>";
print $_SESSION['username']."<br>";
print $_SESSION['time']; ?>
세션 삭제 기능은 로그아웃 버튼을 만들 때 연관이 있다. 세션은 기본적으로 브라우저를 닫으면 사라진다. 하지만 단순 로그아웃을 원하는 사용자 입장에서는 브라우저를 종료하고 다시 실행해야 하는 불편이 있다. 그렇다면 로그아웃 버튼을 만들어 제공하는 것이 좋겠다.
unset() : unset함수를 사용해 세션을 삭제할 수 있다.
EX) unset($_SESSION["username"]) : username이라는 세션을 삭제
<?php // 로그아웃 기능 수행
session_start();
unset($_SESSION["username"]); // 세션 삭제
setcookie("username",""); // 쿠키 삭제
setcookie("password",""); // 쿠키 삭제
header("Location:http://localhost:63342/htdocs/ch04/login_form.php");
?>
관리자 아이디/비밀번호를 서버에 '지정'해두고, 해당 아이디, 비밀번호가 제대로 입력되었을 때만 로그인 처리를 하는 코드이다.
아이디/비밀번호가 정확히 입력되어야 한다.
- 로그인 유지 체크박스를 클릭했을 경우, 쿠키를 생성한다.
로그인상태 유지를 위한 세션을 생성한다,
이후 redirect 한다.
만약 아이디/비밀번호가 정확하지 않다면, alert를 띄운다.

1-1. 로그인 오류 시


2-1. 쿠키 및 세션 생성 확인

3. 로그아웃(세션, 쿠키 삭제 확인)

로그인 페이지
세션 유무에 따라 사용자에게 각각 다른 페이지를 표시함.
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head lang="ko">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>
관리자 로그인 페이지
</title>
</head>
<body>
<?php
if(isset($_COOKIE["username"])){
$_SESSION["username"] = $_COOKIE["username"];
}
if (!isset($_SESSION['username'])){
?>
<form action="cookie_setcookie&login.php" method="post">
<table border="1">
<tr>
<td><input type="text" required placeholder="아이디" name="username"></td>
</tr>
<tr>
<td><input type="password" required placeholder="비밀번호" name="password"></td>
</tr>
<tr align="center">
<td>
<input type="checkbox" value="yes" name="chkbox">로그인 상태 유지
<input type="submit" value="로그인">
</td>
</tr>
</table>
</form>
<?php } else {
print $_SESSION["username"]."님 환영합니다.";?>
<button><a href="logout.php">로그아웃</a></button>
<?php } ?>
</body>
</html>
로그인 처리
<?php
// 세션 개념도 추가해보기(3, 11번째 줄)
session_start();
$username = $_REQUEST["username"];
$password = $_REQUEST["password"];
// $chkbox = $_REQUEST["chkbox"]; // 클라이언트가 chkbox를 안 누르고 요청 보내면 Undefined Index 오류 발생. 이를 위해 isset() 사용
if ($password == "1234" && $username == "admin"){
// admin 로그인 성공한 경우에만 쿠키생성 / 세션 생성
// isset() -> 'chkbox'라는 변수가 할당된 상태로 왔는지, 안 왔는지를 확인해줌.
// 기존 = if ($chkbox != null)
if (isset($_REQUEST['chkbox'])) {
$a = setcookie("username", $username, time() + 60);
$b = setcookie("password", $password, time() + 60); //time() = expire 시간 설정하는 것)
}
$_SESSION["username"] = $username;
header("Location:http://localhost:63342/htdocs/ch04/login_form.php");
exit;
} else {
?>
<script>
alert("관리자 아이디와 비밀번호를 다시 확인해주세요.")
history.back()
</script>
<?php } ?>
로그아웃
<?php
session_start();
unset($_SESSION["username"]);
setcookie("username","");
setcookie("password","");
header("Location:http://localhost:63342/htdocs/ch04/login_form.php");
?>