C#에서 세션(Session)은 웹 애플리케이션에서 사용자별로 유지되는 서버 측 상태 저장 방식을 의미합니다. ASP.NET에서는 HttpSessionState 클래스를 사용하여 세션을 관리합니다. 세션은 웹 애플리케이션에서 사용자의 상태와 데이터를 유지하는 데 유용하며, 사용자 인증, 장바구니, 사용자 설정 등 다양한 용도로 사용됩니다.
세션의 기본 개념
- 상태 유지: HTTP는 본래 상태를 유지하지 않는(stateless) 프로토콜입니다. 세션은 이를 보완하여 사용자 상태를 유지합니다.
- 고유 식별자: 세션은 각 사용자에게 고유한 세션 ID를 할당하여 사용자를 구분합니다. 이 세션 ID는 클라이언트의 쿠키에 저장되거나 URL에 포함되어 서버에 전달됩니다.
- 서버 측 저장: 세션 데이터는 서버 측에 저장되며, 각 사용자에 대해 독립적으로 관리됩니다.
세션의 주요 구성 요소
- 세션 ID: 각 사용자를 고유하게 식별하기 위해 서버가 생성한 고유한 식별자입니다.
- 세션 데이터: 사용자가 세션 동안 저장하는 데이터로, 서버 메모리나 다른 저장소(예: 데이터베이스, 파일 시스템)에 저장될 수 있습니다.
- 쿠키: 세션 ID를 클라이언트에 저장하고, 이를 통해 서버로 전달됩니다.
세션 관리
세션 시작 및 설정
세션은 사용자가 웹 애플리케이션에 처음 접근할 때 자동으로 시작됩니다. 새로운 세션이 생성되면 서버는 세션 ID를 생성하고, 클라이언트의 쿠키에 저장합니다.
// 세션 데이터 저장
Session["UserName"] = "JohnDoe";
Session["UserAge"] = 30;
세션 데이터 접근
세션에 저장된 데이터는 Session 객체를 통해 접근할 수 있습니다.
// 세션 데이터 접근
string userName = Session["UserName"] as string;
int userAge = (int)Session["UserAge"];
세션 종료
사용자가 로그아웃하거나 세션이 만료되면 세션이 종료됩니다. 명시적으로 세션을 종료하려면 Session.Abandon() 메서드를 사용합니다.
// 세션 종료
Session.Abandon();
세션 설정
ASP.NET에서 세션의 다양한 속성을 설정할 수 있습니다. 이러한 설정은 Web.config 파일을 통해 구성할 수 있습니다.
<configuration>
<system.web>
<sessionState
mode="InProc"
timeout="20"
cookieless="false"
regenerateExpiredSessionId="true" />
</system.web>
</configuration>
- mode: 세션 상태 저장 모드를 설정합니다. 가능한 값은 InProc (서버 메모리), StateServer (별도 상태 서버), SQLServer (SQL 데이터베이스), Custom (사용자 정의 저장소)입니다.
- timeout: 세션 만료 시간을 분 단위로 설정합니다.
- cookieless: 세션 ID를 쿠키가 아닌 URL에 저장할지 여부를 설정합니다.
- regenerateExpiredSessionId: 만료된 세션 ID를 재생성할지 여부를 설정합니다.
세션 저장소 모드
- InProc: 세션 상태를 서버 메모리에 저장합니다. 가장 빠르지만, 서버가 재시작되거나 웹 애플리케이션이 재설정되면 세션 데이터가 손실됩니다.
- StateServer: 별도의 상태 서버를 사용하여 세션 상태를 저장합니다. 서버 간 세션 공유가 가능하며, 웹 애플리케이션이 재설정되어도 세션 데이터가 유지됩니다.
- SQLServer: SQL Server 데이터베이스에 세션 상태를 저장합니다. 안정성이 높고, 서버 간 세션 공유가 가능합니다.
- Custom: 사용자 정의 저장소를 사용하여 세션 상태를 저장합니다.
세션의 장단점
장점:
- 상태 유지: 사용자 별로 상태를 유지할 수 있습니다.
- 안전성: 서버 측에 저장되므로 클라이언트에서 조작할 수 없습니다.
- 유연성: 다양한 데이터 저장소와 설정을 통해 유연하게 사용할 수 있습니다.
단점:
- 성능 저하: 세션 데이터를 서버 메모리에 저장하면 메모리 사용량이 증가하여 성능이 저하될 수 있습니다.
- 확장성 문제: InProc 모드는 서버 클러스터 환경에서 사용하기 어렵습니다.
- 데이터 유실 가능성: InProc 모드에서 서버가 재시작되면 세션 데이터가 유실됩니다.
요약
C#에서 세션은 웹 애플리케이션에서 사용자 상태를 유지하는 중요한 방법입니다. 세션 ID를 통해 각 사용자를 고유하게 식별하며, 서버 측에 데이터를 저장하여 신뢰성과 안전성을 제공합니다. 다양한 저장소 모드와 설정을 통해 애플리케이션의 요구에 맞게 세션을 구성할 수 있습니다.
'공부 > C#' 카테고리의 다른 글
C# Packet Generator (0) | 2024.06.13 |
---|---|
BitConverter란? (1) | 2024.06.12 |
패킷(Packet) (0) | 2024.06.10 |
TCP / UDP (0) | 2024.06.10 |
소켓 (1) | 2024.06.05 |