php 입문 | 페이지 전환, 쿠키, 세션 | 세션이란?


쿠키는 사용자 고유의 정보를 유지하는데 도움이 되지만, “아주 작은 텍스트 밖에 저장할 수 없다"는 단점이 있다. 더 많은 데이터를 저장하기 위해서는 쿠키 부적합하다. 이러한 경우에 사용되는 것이 “세션"이라는 기능이다.

세션은 서버와 클라이언트(Web 브라우저)사이에 연결을 지속적으로 유지할 수 있도록 처리하는 기술이다. 지금까지 설명한 바와 같이, Web이라는 매체는 항상 “1개의 페이지마다 독립된 것"이었다. 서버와 브라우저는 페이지에 액세스를 할 때마다 통신할뿐 상대가 누군가 Web 사이트의 어떤 페이지에서 어떤 페이지로 이동하고 있는지에 대한 지속적인 정보는 얻을 수 없는 구조로 되어있다.

세션은 액세스한 클라이언트에 고유한 ID(이를 세션 ID라고 한다)를 발급하고 이를 쿠키에 저장하거나 URL에 붙이거나 하여 서버와 통신할 때 항상 이 ID가 송수신되는 있도록 한다. 그리고 이 ID에 의해, 현재 액세스를 하고 있는 사용자를 식별한다.

이 세션을 이용하여 사용자 고유의 정보를 저장할 수있게 되었다. 서버는 서버 안에서 특정 세션 ID 정보를 보관해 두었다가 클라이언트가 액세스되면 해당 세션 ID가 저장되어 있는 정보를 꺼내 사용한다.

PHP에는 세션 사용은 매우 간단다. 세션을 시작하기 위해 먼저

session_start();

이 함수을 수행한다. 이것으로 세션은 사용할 수 있게 되었다. 주의해야 할 것은, 이 session_start 함수도 뭔가 출력되기 전에 실행되어야 한다는 점이다.

세션은 지금 설명한 것처럼 쿠키에 세션 ID를 저장하여 동작하기 때문에, 헤더에 필요한 정보를 추가하고 이동한다. 따라서 헤더가 전송된 후에 session_start를 호출해도 세션은 사용할 수 없다.

세션에 저장하는 정보는 $_SESSION라는 PHP의 시스템에서 제공하는 연관 배열에 정리된다. 이는 $_COOKIE 등과 달리 값을 읽고 쓸 수 있다. 즉, 필요에 따라 $_SESSION에 값을 저장하거나 꺼내거나 할 수 있다. 그래서 쿠키처럼 사용에 시간적인 차이(저장된 때 값이 아직 존재하지 않고, 그 후에 액세스에서 제공되는 것)를 둘 필요는 없다. 평범한 연관 배열과 똑같이 사용할 수 있다.