php 입문 | 페이지 전환, 쿠키, 세션 | 세션이란?
쿠키는 사용자 고유의 정보를 유지하는데 도움이 되지만, “아주 작은 텍스트 밖에 저장할 수 없다"는 단점이 있다. 더 많은 데이터를 저장하기 위해서는 쿠키 부적합하다. 이러한 경우에 사용되는 것이 “세션"이라는 기능이다.
세션은 서버와 클라이언트(Web 브라우저)사이에 연결을 지속적으로 유지할 수 있도록 처리하는 기술이다. 지금까지 설명한 바와 같이, Web이라는 매체는 항상 “1개의 페이지마다 독립된 것"이었다. 서버와 브라우저는 페이지에 액세스를 할 때마다 통신할뿐 상대가 누군가 Web 사이트의 어떤 페이지에서 어떤 페이지로 이동하고 있는지에 대한 지속적인 정보는 얻을 수 없는 구조로 되어있다.
세션은 액세스한 클라이언트에 고유한 ID(이를 세션 ID라고 한다)를 발급하고 이를 쿠키에 저장하거나 URL에 붙이거나 하여 서버와 통신할 때 항상 이 ID가 송수신되는 있도록 한다. 그리고 이 ID에 의해, 현재 액세스를 하고 있는 사용자를 식별한다.
이 세션을 이용하여 사용자 고유의 정보를 저장할 수 있게 되었다. 서버는 서버 안에서 특정 세션 ID 정보를 보관해 두었다가 클라이언트가 액세스되면 해당 세션 ID가 저장되어 있는 정보를 꺼내 사용한다.
PHP에는 세션 사용은 매우 간단다. 세션을 시작하기 위해 먼저
session_start();
이 함수를 수행한다. 이것으로 세션은 사용할 수 있게 되었다. 주의해야 할 것은, 이 session_start 함수도 뭔가 출력되기 전에 실행되어야 한다는 점이다.
세션은 지금 설명한 것처럼 쿠키에 세션 ID를 저장하여 동작하기 때문에, 헤더에 필요한 정보를 추가하고 이동한다. 따라서 헤더가 전송된 후에 session_start를 호출해도 세션은 사용할 수 없다.
세션에 저장하는 정보는 $_SESSION
라는 PHP의 시스템에서 제공하는 연관 배열에 정리된다. 이는 $_COOKIE
등과 달리 값을 읽고 쓸 수 있다. 즉, 필요에 따라 $_SESSION
에 값을 저장하거나 꺼내거나 할 수 있다. 그래서 쿠키처럼 사용에 시간적인 차이(저장된 때 값이 아직 존재하지 않고, 그 후에 액세스에서 제공되는 것)를 둘 필요는 없다. 평범한 연관 배열과 똑같이 사용할 수 있다.