ASP.NET 세션 관리 [예제]

⚡ 스마트 요약

ASP.NET 세션 관리는 상태를 저장하지 않는 HTTP 애플리케이션이 요청 간에 사용자 데이터를 기억할 수 있도록 합니다. 이 문서에서는 ViewState, 키-값 쌍을 저장하는 Session 객체, 실제 작동 예제, 세션 상태 모드, 타임아웃 구성 및 세션 상태의 장점에 대해 설명합니다.

  • 🌐 상태 비저장 HTTP: HTTP는 요청 간에 데이터를 유지하지 않으므로 ASP.NET은 상태를 보존하기 위한 메커니즘을 추가합니다.
  • 🗂️ 뷰스테이트: ViewState는 컨트롤 값을 한 페이지에서 다음 페이지로 자동으로 전달합니다.
  • 🔑 세션 객체: Session[“Key”]는 애플리케이션 수명 주기 동안 키-값 쌍을 저장하고 검색합니다.
  • ⚙️ 상태 모드: 세션 상태는 InProc, StateServer, SQL Server 또는 사용자 지정 저장소에 저장할 수 있습니다.
  • ⏱️ 타임아웃: web.config 파일의 sessionState timeout 설정은 세션이 유지되는 시간을 제어합니다.

ASP.NET 세션 관리 튜토리얼 (예제 포함)

ASP.NET 세션 관리

모든 웹 애플리케이션이 작동하는 HTTP 프로토콜은 상태 비저장 프로토콜입니다. 무상태라는 것은 정보가 한 요청에서 다른 요청으로 유지되지 않는다는 것을 의미합니다.

예를 들어, 이름을 위한 텍스트 상자 하나와 비밀번호를 위한 텍스트 상자 하나가 있는 로그인 페이지가 있다면, 해당 페이지에서 로그인 버튼을 클릭하면 애플리케이션은 사용자 이름과 비밀번호가 다음 페이지로 전달되도록 해야 합니다.

ASP.Net에서는 이러한 기능을 여러 가지 방법으로 구현합니다. 첫 번째 방법은 ViewState라는 개념을 이용하는 것입니다. ASP.Net은 모든 컨트롤의 내용을 ViewState에 자동으로 저장하고, 다음 페이지로 전달합니다. 이는 ViewState라는 속성을 통해 이루어집니다.

개발자가 뷰 상태에서 무엇이든 변경하는 것은 이상적이지 않습니다. ASP.Net에서만 처리해야 하기 때문입니다.

ASP.NET 세션 개체

다른 방법은 "세션 개체"라는 개체를 사용하는 것입니다. Session 객체는 애플리케이션의 수명주기 전반에 걸쳐 사용할 수 있습니다. 세션 개체에 키-값 쌍을 원하는 수만큼 저장할 수 있습니다. 따라서 모든 페이지에서 아래 코드 줄을 통해 Session 개체에 값을 저장할 수 있습니다.

Session["Key"] = value

이 코드는 값을 세션 객체에 저장하며, 'key' 부분은 값에 이름을 지정하는 데 사용됩니다. 이렇게 하면 나중에 해당 값을 검색할 수 있습니다. 값을 검색하려면 아래 명령문을 실행하면 됩니다.

Session["Key"]

ASP.NET 세션 개체 예

이 예제에서는 페이지의 이름 입력란에 입력된 이름을 Session 객체에 저장할 것입니다. 그런 다음 해당 값을 검색하여 페이지에 표시할 것입니다. 아래 코드를 Demo.aspx.cs 파일에 추가해 보겠습니다.

세션 개체 사용

protected void btnSubmit_Click(object sender, EventArgs e)
{
	Session["Name"] = txtName.Text;

	Response.Write(Session["Name"]);

	lblName.Visible = false;
	txtName.Visible = false;
	lstLocation.Visible = false;
	chkC.Visible = false;
	chkASP.Visible = false;
	rdMale.Visible = false;
	rdFemale.Visible = false;
	btnSubmit.Visible = false;
}

Code 설명:-

  1. 첫 번째 코드 줄은 이름 텍스트 상자 컨트롤의 값을 가져와 세션 개체에 저장합니다. Session[“Name”]과 같이 코드를 지정함으로써 해당 속성에 “Name”이라는 이름을 부여하는 것입니다. 속성에 이름을 지정하면 나중에 해당 값을 더 쉽게 가져올 수 있습니다.
  2. 다음 코드 줄은 Session 개체에서 저장된 값을 검색합니다. 그런 다음 'Response.Write' 메서드를 통해 이 값을 클라이언트에 다시 씁니다.
  3. 마지막으로 폼의 모든 컨트롤을 숨깁니다. 이렇게 하지 않으면 모든 컨트롤과 응답 값이 함께 표시됩니다.

위와 같이 변경하면 다음과 같은 결과가 나타납니다.

출력:

세션 개체 사용

출력에서 name의 Session 값이 검색되어 브라우저에 표시된 것을 볼 수 있습니다.

ASP.NET 세션 상태 모드

ASP.NET은 세션 데이터를 여러 위치에 저장할 수 있으며, 이를 세션 상태 모드라고 합니다. 선택하는 모드는 성능, 확장성, 그리고 애플리케이션 재시작 시 데이터 유지 여부에 영향을 미칩니다. 아래 표는 각 모드를 비교한 것입니다.

모드 상태가 저장되는 곳 가장 좋은
InProc 웹 서버 메모리에 저장됩니다(기본값). 단일 서버 애플리케이션; 가장 빠르지만 재시작 시 데이터가 손실됩니다.
상태서버 별도의 ASP.NET 상태 서비스 프로세스 웹 팜; 애플리케이션 재시작 후에도 유지됨
SQLServer SQL Server 데이터베이스 내구성이 뛰어나고 확장 가능한 상태 관리가 필요한 웹 팜
관습 사용자가 구현하는 사용자 지정 공급자 Redis와 같은 전문 매장
떨어져서 세션 상태가 비활성화됨 세션이 필요 없는 애플리케이션

InProc는 기본값이며 가장 빠르지만, 로드 밸런싱 배포의 경우 StateServer 또는 SQLServer를 사용하여 여러 서버에서 세션을 사용할 수 있도록 유지합니다.

ASP.NET에서 세션 시간 초과를 설정하는 방법

세션은 영구적으로 지속되지 않으며, 일정 시간 동안 활동이 없으면 만료됩니다. 웹 설정 파일(web.config)에서 sessionState 요소를 사용하여 이 시간 제한을 설정할 수 있으며, 시간 제한 값은 분 단위입니다.

<configuration>
  <system.web>
    <sessionState mode="InProc" timeout="20" />
  </system.web>
</configuration>

코드로 설정할 수도 있습니다. Session.Timeout = 30;기본 타임아웃은 20분입니다. 타임아웃 시간을 짧게 설정하면 서버 메모리가 더 빨리 해제되고 보안이 향상되는 반면, 타임아웃 시간을 길게 설정하면 사용자가 더 오랫동안 로그인 상태를 유지할 수 있습니다.

세션 상태의 장점과 단점

세션 상태는 편리하지만, 크게 의존하기 전에 고려해야 할 장단점이 있습니다.

장점:

  • 상점과 같은 사용자별 데이터를 저장하는 데 사용하기 간편합니다.ping 장바구니 또는 로그인 정보.
  • 문자열뿐만 아니라 복잡한 객체도 저장할 수 있습니다.
  • 데이터는 서버에 저장되므로 클라이언트 측 저장소보다 안전합니다.

단점 :

  • InProc 모드는 서버 메모리를 많이 사용하며 웹 팜 전체로 확장되지 않습니다.
  • 세션 데이터는 세션 시간 초과 또는 애플리케이션 재시작 시(InProc 모드에서) 손실됩니다.
  • 사용자별로 많은 양의 데이터를 저장하면 부하가 심할 때 성능 저하를 초래할 수 있습니다.

자주 묻는 질문

예. AI 비서는 세션 값을 저장하고 읽는 코드를 생성하고, 적절한 상태 모드를 제안하며, 웹 구성(web.config) 설정을 작성할 수 있습니다. Rev생성된 코드를 검토하여 확장성 및 보안 요구 사항에 부합하는지 확인하십시오.

네. AI 기반 코드 검토 도구는 세션 고정, HTTPS 전용 쿠키 누락 또는 세션에 민감한 데이터 저장과 같은 위험 요소를 표시할 수 있습니다. 이러한 발견 사항은 참고 자료로 활용하고 배포 전에 보안 테스트를 통해 수정 사항을 확인하십시오.

세션 상태는 단일 사용자 세션에 대한 데이터를 저장하고, 애플리케이션 상태는 애플리케이션의 모든 사용자가 공유하는 데이터를 저장합니다. 사용자별 값에는 세션 상태를 사용하고, 카운터 또는 구성과 같은 전역 데이터에는 애플리케이션 상태를 사용하십시오.

아니요. 각 사용자는 쿠키에 저장된 고유한 세션 ID로 식별되는 개별 세션을 갖습니다. 한 사용자가 다른 사용자의 세션 값을 읽을 수 없기 때문에 세션은 사용자별 데이터를 저장하는 데 사용됩니다.

이 게시물을 요약하면 다음과 같습니다.