재우니의 블로그

Session in ASP.Net Webform - 강좌3

 

 

목차

  • 세션 모드 및 상태 제공자
    • 세션 상태
    • 세션 이벤트
    • 세션 모드
      • InProc 세션 모드
        • InProc 세션 모드 개요
        • 언제 InProc 세션 모드를 사용해야 합니까?
        • 장점과 단점
      • StateServer 세션 모드
        • StateServer 세션 모드 개요
        • StateServer 세션 모드 구성
        • StateServer 세션 모드 작동 방식
        • StateServer 세션 모드의 예
        • 장점과 단점
      • SQL 서버 세션 모드
        • SQLServer 세션 모드 작동 방식
        • 언제 SQL Server 세션 모드를 사용해야 합니까?
        • SQL Server 세션 모드 구성
        • 장점과 단점
      • 사용자 지정 세션 모드
        • 사용자 정의 세션 모드는 어떻게 작동합니까?
        • 사용자 정의 세션 모드는 언제 사용해야 합니까?
        • 사용자 지정 세션 모드 구성
        • 장점과 단점

 

 

 

 

SQL Server Session Mode

 

 

SQL Server Session Mode 알아보자:

 

 

SQL 서버 Session 모드는 좀더 보안적이며 신뢰할 수 있는 session 관리를 ASP.NET 에서 제공합니다.  이 SESSION MOD E 에서 SESSION 데이터는 직렬화를 하며 SQL SERVER 데이터에 저장을 합니다. 이는 전형적으로 웹팜에서 사용이 됩니다. SQL SERVER 는 InProc 또는 State Server Mode 보다 좀 더 보안적입니다. 이는 sql server 보안 환경에 의해 데이터를 쉽게 보안이 될수 있습니다. (보안 강화)

주요 세션에 대한 단점은 직렬화 그리고 역직렬화로 오버해드 될 수 있습니다. (비용발생)

 

 

 

 

 

SQL SERVER 를 SETUP 하기 위해서 아래와 같은 2개의 SQL 스크립트가 필요합니다.

 

  • 설치파일 : InstallSqlState.sql
  • 제거파일: UninstallSQLState.sql

 

SQL Server를 구성하는 가장 쉬운 방법은 aspnet_regsql 명령을 사용하는 것입니다.

configuration section 에서 이러한 파일의 사용에 대해 자세히 설명했습니다.

 

📢📢📢📢 이것은 web farm 시나리오에서 가장 유용한 상태 관리입니다.

 

 

 

SQL Server Session Mode 는 언제 사용해야 하나?

 

  • SQL Server 세션 모드는 보다 안정적이고 안전한 세션 상태 관리입니다.
  • 데이터를 중앙 위치(데이터베이스)에 보관합니다.
  • 보안이 강화된 세션을 구현해야 하는 경우 SQLServer 세션 모드를 사용해야 합니다.
  • 서버가 자주 다시 시작되는 경우 이상적인 선택입니다.
  • 이것은 📢📢 web farm 및 web garden  시나리오에 완벽한 모드입니다(나중에 자세히 설명했습니다).
  • 서로 다른 두 응용 프로그램 간에 세션을 공유해야 할 때 SQLServer 세션 모드를 사용할 수 있습니다.

 

 

 

 

SQL Server Session Mode 환경설정하기 

 

 

 

SQLServer 세션 모드에서는 세션 데이터를 SQL Server에 저장하므로 먼저 web.config에 데이터베이스 연결 문자열을 제공해야 합니다. 이를 위해 sqlConnectionString 특성이 사용됩니다.

 

 

연결 문자열을 설정한 후 SQL Server를 구성해야 합니다. 이제 aspnet_regsql 명령을 사용하여 SQL Server를 구성하는 방법을 설명하겠습니다.

 

 

 

Step 1: command 창을 띄우고, 프레임웍 버전 디렉토리로 이동을 합니다.

 

경로 : c:\windows\microsoft.net\framework\<version>.

 

Step 2 : 다음 매개 변수를 사용하여 aspnet_regsql 명령을 실행합니다.

 

 

 

매개변수에 대한 설명은 아래와 같습니다.

 

파라미터 설명
-ssadd SQLServer 모드 세션 상태에 대한 지원을 추가합니다.
-sstype p P는 지속됨을 나타냅니다. 서버에서 세션 데이터를 유지합니다.
-S Server name.
-U User name.
-P Password.

 

명령을 실행하면 다음 메시지가 표시됩니다.
 

 

 

이게 끝입니다. 매우 심플하죠.

 

 

Step 3  SQL Server Management Studio를 열고 새 데이터베이스 ASPState가 생성되었는지 확인하고 두 개의 테이블이 있어야 합니다.

 

  • ASPStateTempApplications
  • ASPStateTempSessions

 

 

 

 

StateServer 예제의 configuration string 을 변경하고 동일한 샘플 애플리케이션을 실행합니다.

Roll 번호와 사용자 이름을 저장하고 submit 버튼을 클릭하기만 하면 됩니다. SQL Server Management Studio에서 ASPStateTempSessions 테이블을 엽니다. 아래 내용은 세션 데이터입니다.

 

 

 

 

 

이제 StateServer 모드 섹션에서 이미 설명드렸듯이, 확인 검증을 위해 아래와 같이 테스트를 수행해 봅니다.
 
  1. StydentInfo Class 에서 Serialize키워드를 제거합니다.
  2. IIS 를 reset 하고,  Restore Session을 클릭합니다.
  3. SQL Server Services 를 중지합니다.

 

SQLServer 세션 모드에 대해 잘 설명한 것 같네요.
 
 

 

장단점을 알아보자

 

 

 

장점 :

 

 

  • IIS를 다시 시작해도 세션 데이터는 영향을 받지 않습니다.
  • 가장 안정적이고 안전한 세션 관리.
  • 데이터를 중앙에 보관하고 다른 애플리케이션에서 쉽게 액세스할 수 있습니다.
  • 📢📢📢 Web Form 및 Web Garden 시나리오에서 매우 유용합니다.

 

 

단점:

 

 

  • 처리 속도는 본질적으로 매우 느립니다. (제일 느리다.)
  • 개체 직렬화 및 역직렬화는 응용 프로그램에 대한 오버헤드를 생성합니다. (오버헤드 발생)
  • 세션 데이터는 다른 서버에서 다루기 때문에 SQL Server를 관리해야 합니다. 항상 실행 중이어야 합니다. (SQL SERVER 존재해야 함)

참조:

 

Session-State Modes

Table of contents Session-State Modes Article 12/04/2014 9 minutes to read In this article --> ASP.NET session state supports several different storage options for session data. Each option is identified by a value in the SessionStateMode enumeration. The

learn.microsoft.com

 

 


 

 

 

 

 

 

Custom Session Mode  

 

 

Custom Session Mode 알아보자 :

 

 

일반적으로 애플리케이션에 InProc, StateServer 또는 SQLServer 세션 모드를 사용하지만 Custom 세션 모드의 기본 사항도 알아야 합니다. 이 세션 모드는 커스텀 세션이 우리에게 세션 ID를 포함한 모든 것을 생성할 수 있는 모든 권한을 부여하기 때문에 매우 흥미롭습니다. 고유한 알고리즘을 작성하여 세션 ID를 생성할 수 있습니다.

 

이를 가지고 session ID 에 대한 자신의 알로리즘을 개발할 수 있습니다. SessionStateStoreProviderBase 기본 클래스에서 가져온 또 다른 저장 매카니즘으로 세션 데이터를 custom 제공자로 구현할 수 있습니다. 이 뿐만 아니라 ISessionIDManager 구현으로 새로운 sesson ID 를 generate 할 수 있습니다. 여기에는 아래와 같은 메소드들이 Custom Session 의 구현을 하는 동안 호출됩니다.

 

SessionStateStoreProviderBase 단순히 클래스에서 파생하여 다른 저장소 메커니즘에 세션 데이터를 저장하는 Custom providers 를 구현할 수 있습니다 . 이 ISessionIDManager 를 구현하여 새 sesson ID 를 생성할 수도 있습니다 . Custom Session 을 구현하는 동안 호출되는 메서드는 다음과 같습니다.

 

 

 

 

 

 

Initialize 메서드에서 사용자 지정 공급자를 설정할 수 있습니다. 그러면 해당 공급자와의 연결이 초기화됩니다. SetItemExpireCallback은 SessionTimeOut을 설정하는 데 사용됩니다.

 

세션 만료 시 호출할 메서드를 등록할 수 있습니다. InitializeRequest는 모든 요청에서 호출되고 CreateNewStoreData는 SessionStateStoreData의 새 인스턴스를 생성하는 데 사용됩니다.

 

 

Custom Session Mode 은 언제 사용합니까?

 

 

아래와 같은 경우일때, custom session 모드를 사용할 수 있습니다.;

 

  • SQL Server 이외의 위치에 세션 데이터를 저장하려고 합니다.
  • 세션 데이터를 저장하기 위해 기존 테이블을 사용해야 하는 경우.
  • 우리 자신의 세션 ID를 만들어야 할 때.

 

 

어떻게 설정해야 할까요?

 

 

다음과 같이 web.config 를 구성해야 합니다 .

 

 

이에 대해 자세히 알아보려면 참조 섹션을 확인하십시오.

 

 

장단점에 대해 알아보자.

 

 

장점 :

 

 

  • 세션 데이터를 저장하기 위해 기존 테이블을 사용할 수 있습니다. 이는 기존 데이터베이스를 사용해야 할 때 유용합니다.
  • IIS에 종속되지 않으므로 웹 서버를 다시 시작해도 세션 데이터에 영향을 미치지 않습니다.
  • 세션 ID 생성을 위한 자체 알고리즘을 만들 수 있습니다.

 

단점 :

 

  • 데이터 처리가 매우 느립니다.
  • custom state provider 를 만드는 것은 보안을 보장하기 위해 신중하게 처리해야 하는 low-level 작업입니다.

 

직접 생성하기보다는 third party provider  사용하는 것을 꼭 권장 드립니다.

 

 

References:

 

Session-State Modes

Table of contents Session-State Modes Article 12/04/2014 9 minutes to read In this article --> ASP.NET session state supports several different storage options for session data. Each option is identified by a value in the SessionStateMode enumeration. The

learn.microsoft.com

 

 

 

 

🎈🎈📢📢📢 Session in ASP.Net webform - 강좌1 바로가기

🎈🎈📢📢📢 Session in ASP.Net webform - 강좌2 바로가기

🎈🎈📢📢📢 Session in ASP.Net webform - 강좌3 바로가기

🎈🎈📢📢📢 Session in ASP.Net webform - 강좌4 바로가기

 

 

 

 

출처 사이트

 

 

https://www.codeproject.com/Articles/32545/Exploring-Session-in-ASP-Net

 

Exploring Session in ASP.NET

This article describes Session in ASP.NET 2.0. Different types of Session and their configuration. Also describes Session on Web Farm, Load Balancer, and Web Garden scenarios.

www.codeproject.com