쿠키는 접속자 컴퓨터에 저장되는 임시 데이터입니다. 이렇게 외부에 임시 저장된 쿠키는 다른 사용자 또는 해킹에 의해서 조작될 수 있는 문제점들이 있습니다.
이런 이유로 쿠키는 회원 정보와 같은 중요한 내용을 담기에는 보안상 위험합니다. 웹 초기에는 쿠키의 변경으로 웹 사이트 해킹 등 문제점이 있었습니다.
세션(Sessions) 은 이러한 문제점을 보완하기 위해 민감한 정보를 접속자의 컴퓨터가 아닌 서버에 저장하는 기술입니다.
세션은 접속자의 브라우저가 실행되고 있는 동안 유지됩니다.
PHP에서 세션을 사용하기 위해서는 세션의 사용을 스크립트 시작 전에 미리 알려줘야 합니다.
스크립트 실행 상단에 session_start()함수를 호출합니다. 세션 시작을 호출하면 이후 PHP 스크립트 전반에서 세션 기능을 사용할 수 있습니다.
예제파일: session-01.php
<?php
// 세션 시작
session_start();
?>
세션 시작 함수는 HTML태그 출력 전에 실행되어야 합니다.
PHP에서 세션 값을 설정하는 것은 쿠키 사용법 보다 더 매우 쉽습니다.
세션 또한 쿠키와 같이 슈퍼변수 배열 타입으로 되어 있습니다. $_SESSION 배열변수는 PHP 스크립트 전반에서 별도의 특별한 지정이나 선언 없이도 사용할 수 있습니다.
$_SESSION[세션명] = 세션 값;
세션 이름을 $_SESSION 배열의 키 값으로 설정하고 값을 입력하면 됩니다.
설정한 세션 값은 $_SESSION 슈퍼변수의 배열 키 값을 입력하면 됩니다.
예제 파일 session-02.php
<?php
session_start();
$_SESSION["user"] = "jiny";
echo $_SESSION["user"];
?>
결과
jiny
세션은 서버에 임시 데이터를 저장합니다. 또한 브라우저가 실행되고 있는 동안 유지됩니다.
설정한 세션 값은 여러 PHP스크립트 파일 에서도 값을 공유하여 사용할 수 있습니다.
예제 파일 session-03.php
<?php
session_start();
echo $_SESSION["user"];
?>
결과
jiny
위의 예제는 session-01.php에서 설정한 세션 값을 session-02.php에서도 확인할 수 있습니다. PHP 스크립트 언어는 페이지 단위로 로딩 처리되기 때문에 A 페이지에서 작업한 내용을 B 페이지에 별도의 데이터 작업 없이 값을 전달하는 것으로 매우 편리합니다.
대부분 세션은 사용자 브라우저 접속 시 user-key 형태로 생성됩니다. 세션 키는 765487cf34ert8daccb38654f3a7e12처럼 알아볼 수 없는 형태를 가집니다.
만일 페이지가 변경되거나 새로운 창이 생성될 때 동일한 세션을 가지고 있으면 user-key에 접근할 수 있고, 아닌 경우에는 새로운 세션이 생성됩니다.
세션 값의 변경은 새로운 세션을 선언하는 것과 동일합니다. 세션을 설정하는 것처럼 슈퍼변수 값에 그냥 새로운 값을 저장하면 됩니다.
예제파일:session-04.php
<?php
session_start();
$_SESSION["user"] = "abcd";
?>
위의 예는 세션 user 의 값을 변경하는 것입니다. 만일 다른 페이지에서 설정한 값이 없다고 하면 처음으로 세션을 생성한 것으로 볼 수 있습니다.
예제파일:session-05.php
<?php
// remove all session variables
session_unset();
// destroy the session
session_destroy();
?>
위 함수를 실행하면 모든 세션의 값을 제거하거나 파괴할 수 있습니다. 만일 개별 세션만 삭제하고자 하는 경우에는 세션 값에 null 또는 다른 값을 넣어주면 됩니다.
세션의 설정 값은 PHP의 환경 설정 파일 php.ini에 정의되고 영향을 받습니다. 세션의 설정을 변경하기 위해서는 직접 php.ini를 수정해야 합니다. 하지만 일부 임시로 세션 설정을 변경하는 경우라면 직접 php.ini 파일을 수정하는 것은 어려울 것입니다. 따라서 PHP 7.x부터는 php.ini의 값을 프로그램에서 동적으로 임시 재설정하여 실행할 수 있습니다.
세션 시작 함수 session_start() 호출 시 설정 배열 인자 값을 전달해주면 세션 환경을 변경하여 실행할 수 있습니다.
예제파일:session-06.php
<?php
session_start([
'cache_limiter' => 'private',
'read_and_close' => true,
]);
?>
예를 들어 session.cache_limiter 값을 ‘private’으로 변경하고 참조한 경우에 세션을 직접 종료할 수도 있습니다.