세션은 서버에 저장되는 접속 클라이언트별 사용자의 정보다.
<?php
function redirect($url){
header('Location: ' . $url);
exit();
}
session_start();
$action = $_GET['action'];
if ($action == "set"){
$_SESSION['key'] = 'session_value';
redirect("?action=get");
}elseif ($action == "get"){
if (isset($_SESSION['key'])){
echo $_SESSION['key'];
}else{
echo "NO SESSION";
}
}elseif ($action == "remove"){
if (isset($_SESSION['key'])){
unset($_SESSION['key']);
}
redirect("?action=get");
}
위 코드를 session.php 파일에 저장하고 브라우저에서 결과를 확인한다.
A. 처음에 세션이 없을 때를 확인하기 위해 http://localhost/session.php?action=get 로 접속한 결과는 아래와 같다.
NO SESSION
B. 세션 세팅 http://localhost/session.php?action=set 결과를 확인한다. 세션을 세팅하고 나서 확인을 위해 http://localhost/session.php?action=get 으로 이동했다.
session_value
C. 세션 삭제 http://localhost/session.php?action=remove 결과를 확인한다. 세션을 삭제하고 나서 http://localhost/session.php?action=get 으로 이동했다.
NO SESSION
기술적으로 보면, 세션은 아래와 같이 작동한다.
- 클라이언트가 서버에 요청한다.
- 서버는 클라이언트가 보낸 데이터 중 세션키에 해당하는 쿠키가 있는지 확인한다. PHP의 경우 기본값은 PHPSESSIONID이다.
- 세션 키가 없다면 PHP는 새로운 세션 키를 생성하고 데이터를 서버에 저장한다.
- 클라이언트에 PHPSESSIONID=세션키 형태의 쿠키를 응답한다.
- 다음번에 클라이언트가 서버에 요청할 때는 PHPSESSIONID=세션키 형태의 쿠키를 함께 전달하게 된다.
- PHP는 PHPSESSIONID=세션키 쿠키가 요청 안에 포함되었으므로 기존에 서버에 저장된 데이터를 읽어서 처리할 수 있다.
redirect 함수는 여러 군데서 쓰이기 때문에 편의를 위해 만들어 두었다.
function redirect($url){
header('Location: ' . $url);
exit();
}
php에서 세션을 사용하려면 session_start() 를 반드시 사용하기 전에 써서 세션을 준비해야 한다. PHP의 기본 세션은 단순한 파일로 저장되기 때문에 파일을 읽어오는 것이다.
session_start();
$action 변수는 파라미터에 따라 하는 일을 구분하기 위해 쿼리 스트링으로 입력을 받았다.
$action 의 값이 set 일 경우 세션을 설정 하고, get 일 경우 세션을 가지고 오는 역할 을 하고, remove 일 경우 세션을 삭제 하게 된다.
$action = $_GET['action'];
if ($action == "set"){
세션 설정
}elseif ($action == "get"){
if (세션이 있다면){
세션을 출력한다.
}else{
"NO SESSION" 메세지를 출력한다.;
}
}elseif ($action == "remove"){
if (세션이 있다면){
세션을 삭제한다.
}
세션 삭제 후 "?action=get" 주소로 이동한다.
}
세션은 $_SESSION 글로벌 전역 변수를 통해 사용할 수 있다. 연관 배열 형태이기 때문에 사용법은 연관배열과 동일하다.
세션에 값을 넣기 위해서는 $_SESSION[세션키] = 세션값 형태로 쓰면 된다.
$_SESSION['key'] = 'session_value';
세션에서 값을 가져오기 위해서는 $_SESSION[세션키] 형태로 가지고 오면 된다.
echo $_SESSION['key'];
세션에 특정 키나 값이 있는지 확인하기 위해서는 isset($_SESSION[세션키]) 형태로 쓰면 된다. isset 은 변수가 존재하는지 확인하는 내장 함수이다.
isset($_SESSION['key'])
세션이 이미 시작했는지 확인하기 위해서는 isset($_SESSION) 으로 확인할 수 있다. 세션이 시작해야만 $_SESSION 변수가 생기기 때문이다. 따라서 session_start() 함수를 쓸 때는 보통 아래와 같이 사용한다.
if (isset($_SESSION) == false){
session_start();
}
세션에서 값을 삭제하기 위해서는 unset $_SESSION[세션키] 으로 삭제하면 된다.
Copyunset($_SESSION['key']);