웹 클라이언트와 웹 서버 사이에서 세션을 유지하는 것은 상태 없는(stateless) HTTP 프로토콜의 특성상 매우 중요한 작업입니다. 사용자가 페이지를 이동할 때마다 이전 요청의 정보가 사라지기 때문에, 서버는 여러 요청이 동일한 클라이언트에서 왔음을 식별할 수 있는 방법이 필요합니다. 대표적인 세션 유지 기법으로는 쿠키(Cookies), 숨김 폼 필드(Hidden Form Fields), URL 재작성(URL Rewriting) 세 가지가 있습니다.
1. 쿠키(Cookies)
웹 서버는 각 웹 클라이언트에게 고유한 세션 ID를 쿠키 형태로 부여할 수 있습니다. 이후 클라이언트가 보내는 모든 요청에는 이 쿠키가 함께 전달되므로, 서버는 수신한 쿠키를 확인하여 해당 클라이언트를 식별할 수 있습니다.
다만 이 방식은 브라우저가 쿠키를 지원하지 않거나 사용자가 쿠키를 차단하는 경우 동작하지 않을 수 있어 완벽하게 신뢰하기 어렵습니다. 따라서 세션 유지를 위한 유일한 수단으로 쿠키에 의존하는 것은 권장되지 않습니다.
2. 숨김 폼 필드(Hidden Form Fields)
웹 서버는 고유한 세션 ID를 담은 숨김(hidden) HTML 폼 필드를 다음과 같이 함께 전송할 수 있습니다.
<input type = "hidden" name = "sessionid" value = "12345">
이렇게 하면 폼이 제출될 때 지정된 이름과 값이 자동으로 GET 또는 POST 데이터에 포함됩니다. 웹 브라우저가 요청을 보낼 때마다 session_id 값을 활용하면 서로 다른 브라우저의 요청을 추적할 수 있습니다.
세션 추적에 효과적인 방법이지만 한 가지 한계가 있습니다. 일반 하이퍼텍스트 링크(<A HREF...>)를 클릭하는 행위는 폼 제출로 이어지지 않기 때문에, 숨김 폼 필드만으로는 모든 상황에서의 범용적인 세션 추적이 불가능합니다.
3. URL 재작성(URL Rewriting)
모든 URL 끝에 추가 데이터를 덧붙이는 방식입니다. 이 데이터가 곧 세션 식별자 역할을 하며, 서버는 해당 세션 ID와 저장해 둔 세션 정보를 연결하여 클라이언트를 구분합니다.
예를 들어 https://example.com/file.htm;sessionid=12345처럼 URL에 sessionid=12345가 붙어 있다면, 웹 서버는 이 값을 읽어 클라이언트를 식별할 수 있습니다.
URL 재작성은 쿠키를 지원하지 않는 브라우저 환경에서도 정상적으로 동작한다는 점에서 가장 안정적인 세션 유지 방법으로 평가됩니다. 단점이라면, 단순한 정적 HTML 페이지조차 포함해 모든 URL을 동적으로 생성하여 세션 ID를 할당해야 한다는 점입니다. 이로 인해 개발 및 관리 부담이 커질 수 있습니다.
마무리
각 기법은 장단점이 뚜렷합니다. 실무에서는 쿠키를 우선적으로 사용하고, 쿠키가 차단된 경우 URL 재작성으로 전환하는 하이브리드 방식을 많이 활용합니다. 서비스의 요구사항과 보안 정책에 맞춰 적절한 세션 유지 전략을 선택하는 것이 중요합니다.