다음을 통해 공유


IHttpSessionState 인터페이스

정의

사용자 지정 세션 상태 컨테이너를 구현하는 계약을 정의합니다.

public interface class IHttpSessionState
public interface IHttpSessionState
type IHttpSessionState = interface
Public Interface IHttpSessionState
파생

예제

다음 코드 예제에서는 인터페이스를 IHttpSessionState 구현하여 명명된 새 세션 상태 컨테이너 클래스를 만듭니다 MySessionState.

using System;
using System.Web;
using System.Web.SessionState;
using System.Collections;
using System.Collections.Specialized;
using System.Text;
using System.Threading;
using System.Globalization;

namespace Samples.AspNet.SessionState
{
  public sealed class MySessionState : IHttpSessionState
  {
    const int MAX_TIMEOUT = 24 * 60;  // Timeout cannot exceed 24 hours.

    string                      pId;
    ISessionStateItemCollection pSessionItems;
    HttpStaticObjectsCollection pStaticObjects;
    int                         pTimeout;
    bool                        pNewSession;
    HttpCookieMode              pCookieMode;
    SessionStateMode            pMode;
    bool                        pAbandon;
    bool                        pIsReadonly;

    public MySessionState(string                      id, 
                          ISessionStateItemCollection sessionItems,
                          HttpStaticObjectsCollection staticObjects,
                          int                         timeout,
                          bool                        newSession,
                          HttpCookieMode              cookieMode,
                          SessionStateMode            mode,
                          bool                        isReadonly)
    {
      pId            = id;   
      pSessionItems  = sessionItems;
      pStaticObjects = staticObjects;
      pTimeout       = timeout;    
      pNewSession    = newSession; 
      pCookieMode    = cookieMode;
      pMode          = mode;
      pIsReadonly    = isReadonly;
    }

    public int Timeout
    {
      get { return pTimeout; }
      set
      {
        if (value <= 0)
          throw new ArgumentException("Timeout value must be greater than zero.");

        if (value > MAX_TIMEOUT)
          throw new ArgumentException("Timout cannot be greater than " + MAX_TIMEOUT.ToString());

        pTimeout = value;
      }
    }

    public string SessionID
    {
      get { return pId; }
    }

    public bool IsNewSession
    {
      get { return pNewSession; }
    }

    public SessionStateMode Mode
    {
      get { return pMode; }
    }

    public bool IsCookieless
    {
      get { return CookieMode == HttpCookieMode.UseUri; }
    }

    public HttpCookieMode CookieMode
    {
      get { return pCookieMode; }
    }

    //
    // Abandon marks the session as abandoned. The IsAbandoned property is used by the
    // session state module to perform the abandon work during the ReleaseRequestState event.
    //
    public void Abandon()
    {
      pAbandon = true;
    }

    public bool IsAbandoned
    {
      get { return pAbandon; }
    }

    //
    // Session.LCID exists only to support legacy ASP compatibility. ASP.NET developers should use
    // Page.LCID instead.
    //
    public int LCID
    {
      get { return Thread.CurrentThread.CurrentCulture.LCID; }
      set { Thread.CurrentThread.CurrentCulture = CultureInfo.ReadOnly(new CultureInfo(value)); }
    }

    //
    // Session.CodePage exists only to support legacy ASP compatibility. ASP.NET developers should use
    // Response.ContentEncoding instead.
    //
    public int CodePage
    {
      get
      { 
        if (HttpContext.Current != null)
          return HttpContext.Current.Response.ContentEncoding.CodePage;
        else
          return Encoding.Default.CodePage;
      }
      set
      { 
        if (HttpContext.Current != null)
          HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding(value);
      }
    }

    public HttpStaticObjectsCollection StaticObjects
    {
      get { return pStaticObjects; }
    }

    public object this[string name]
    {
      get { return pSessionItems[name]; }
      set { pSessionItems[name] = value; }
    }

    public object this[int index]
    {
      get { return pSessionItems[index]; }
      set { pSessionItems[index] = value; }
    }

    public void Add(string name, object value)
    {
      pSessionItems[name] = value;        
    }

    public void Remove(string name)
    {
      pSessionItems.Remove(name);
    }

    public void RemoveAt(int index)
    {
      pSessionItems.RemoveAt(index);
    }

    public void Clear()
    {
      pSessionItems.Clear();
    }

    public void RemoveAll()
    {
        Clear();
    }

    public int Count
    {
      get { return pSessionItems.Count; }
    }

    public NameObjectCollectionBase.KeysCollection Keys
    {
      get { return pSessionItems.Keys; }
    }

    public IEnumerator GetEnumerator()
    {
      return pSessionItems.GetEnumerator();
    }

    public void CopyTo(Array items, int index)
    {
      foreach (object o in items)
        items.SetValue(o, index++);
    }

    public object SyncRoot
    {
        get { return this; }
    }

    public bool IsReadOnly
    {
      get { return pIsReadonly; }
    }

    public bool IsSynchronized
    {
      get { return false; }
    }
  }
}
Imports System.Web
Imports System.Web.SessionState
Imports System.Collections
Imports System.Collections.Specialized
Imports System.Text
Imports System.Threading
Imports System.Globalization

Namespace Samples.AspNet.SessionState

  Public NotInheritable Class MySessionState
    Implements IHttpSessionState
  
    Const MAX_TIMEOUT As Integer = 24 * 60  ' Timeout cannot exceed 24 hours.

    Dim pId            As String
    Dim pSessionItems  As ISessionStateItemCollection
    Dim pStaticObjects As HttpStaticObjectsCollection
    Dim pTimeout       As Integer
    Dim pNewSession    As Boolean
    Dim pCookieMode    As HttpCookieMode
    Dim pMode          As SessionStateMode
    Dim pAbandon       As Boolean
    Dim pIsReadonly    As Boolean

    Public Sub New(id            As String, _
                   sessionItems  As ISessionStateItemCollection, _
                   staticObjects As HttpStaticObjectsCollection, _
                   timeout       As Integer, _
                   newSession    As Boolean, _
                   cookieMode    As HttpCookieMode, _
                   mode          As SessionStateMode, _  
                   isReadonly As Boolean)
    
      pId            = id   
      pSessionItems  = sessionItems
      pStaticObjects = staticObjects
      pTimeout       = timeout    
      pNewSession    = newSession 
      pCookieMode    = cookieMode
      pMode          = mode
      pIsReadonly    = isReadonly
    End Sub


    Public Property Timeout As Integer Implements IHttpSessionState.Timeout
      Get
        Return pTimeout
      End Get
      Set
        If value <= 0 Then _
          Throw New ArgumentException("Timeout value must be greater than zero.")

        If value > MAX_TIMEOUT Then _
          Throw New ArgumentException("Timout cannot be greater than " & MAX_TIMEOUT.ToString())

        pTimeout = value
      End Set
    End Property


    Public ReadOnly Property SessionID As String Implements IHttpSessionState.SessionID
      Get
        Return pId
      End Get
    End Property


    Public ReadOnly Property IsNewSession As Boolean Implements IHttpSessionState.IsNewSession
      Get
        Return pNewSession
      End Get
    End Property


    Public ReadOnly Property Mode As SessionStateMode Implements IHttpSessionState.Mode    
      Get
        Return pMode
      End Get
    End Property


    Public ReadOnly Property IsCookieless As Boolean Implements IHttpSessionState.IsCookieLess    
      Get
        Return CookieMode = HttpCookieMode.UseUri
      End Get
    End Property


    Public ReadOnly Property CookieMode As HttpCookieMode Implements IHttpSessionState.CookieMode    
      Get
        Return pCookieMode
      End Get
    End Property


    '
    ' Abandon marks the session as abandoned. The IsAbandoned property is used by the
    ' session state module to perform the abandon work during the ReleaseRequestState event.
    '
    Public Sub Abandon() Implements IHttpSessionState.Abandon
      pAbandon = True
    End Sub

    Public ReadOnly Property IsAbandoned As Boolean  
      Get
        Return pAbandon
      End Get
    End Property

    '
        ' Session.LCID exists only to support legacy ASP compatibility. ASP.NET developers should use
    ' Page.LCID instead.
    '
    Public Property LCID As Integer Implements IHttpSessionState.LCID
      Get
        Return Thread.CurrentThread.CurrentCulture.LCID
      End Get
      Set
        Thread.CurrentThread.CurrentCulture = CultureInfo.ReadOnly(new CultureInfo(value))
      End Set
    End Property


    '
        ' Session.CodePage exists only to support legacy ASP compatibility. ASP.NET developers should use
    ' Response.ContentEncoding instead.
    '
    Public Property CodePage As Integer Implements IHttpSessionState.CodePage    
      Get
        If Not HttpContext.Current Is Nothing Then
          Return HttpContext.Current.Response.ContentEncoding.CodePage
        Else
          Return Encoding.Default.CodePage
        End If
      End Get
      Set       
        If Not HttpContext.Current Is Nothing Then _
          HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding(value)
      End Set
    End Property


    Public ReadOnly Property StaticObjects As HttpStaticObjectsCollection _
      Implements IHttpSessionState.StaticObjects
    
      Get
        Return pStaticObjects
      End Get
    End Property


    Public Property Item(name As String) As Object Implements IHttpSessionState.Item
      Get
        Return pSessionItems(name)
      End Get
      Set
        pSessionItems(name) = value
      End Set
    End Property


    Public Property Item(index As Integer) As Object Implements IHttpSessionState.Item    
      Get
        Return pSessionItems(index)
      End Get
      Set
        pSessionItems(index) = value
      End Set
    End Property
        

    Public Sub Add(name As String, value As Object) Implements IHttpSessionState.Add    
      pSessionItems(name) = value        
    End Sub


    Public Sub Remove(name As String) Implements IHttpSessionState.Remove    
      pSessionItems.Remove(name)
    End Sub


    Public Sub RemoveAt(index As Integer) Implements IHttpSessionState.RemoveAt    
      pSessionItems.RemoveAt(index)
    End Sub


    Public Sub Clear() Implements IHttpSessionState.Clear 
      pSessionItems.Clear()
    End Sub

    Public Sub RemoveAll() Implements IHttpSessionState.RemoveAll
        Clear()
    End Sub



    Public ReadOnly Property Count As Integer Implements IHttpSessionState.Count    
      Get
        Return pSessionItems.Count
      End Get
    End Property



    Public ReadOnly Property Keys As NameObjectCollectionBase.KeysCollection _
      Implements IHttpSessionState.Keys
    
      Get
        Return pSessionItems.Keys
      End Get
    End Property


    Public Function GetEnumerator() As IEnumerator Implements IHttpSessionState.GetEnumerator
        Return pSessionItems.GetEnumerator()
    End Function


    Public Sub CopyTo(items As Array, index As Integer) Implements IHttpSessionState.CopyTo    
      For Each o As Object In items
        items.SetValue(o, index)
        index += 1
      Next
    End Sub


    Public ReadOnly Property SyncRoot As Object Implements IHttpSessionState.SyncRoot    
        Get
          Return Me
       End Get
    End Property


    Public ReadOnly Property IsReadOnly As Boolean Implements IHttpSessionState.IsReadOnly    
      Get
        Return pIsReadonly
      End Get
    End Property


    Public ReadOnly Property IsSynchronized As Boolean Implements IHttpSessionState.IsSynchronized    
      Get
        Return False
      End Get
    End Property
  End Class
End Namespace

설명

세션 상태 컨테이너는 현재 세션에 대한 세션 상태 값 및 관련 정보에 대한 액세스를 제공합니다. 세션 상태 컨테이너에 포함된 세션 정보는 속성을 사용하여 클래스를 통해 애플리케이션 코드에 HttpSessionStateSession 노출됩니다. 클래스 HttpSessionState 는 세션 상태 컨테이너에 대한 래퍼 클래스입니다.

세션 상태 컨테이너의 ASP.NET 구현은 클래스입니다 HttpSessionStateContainer . 요청의 시작 부분에서 이벤트 SessionStateModule 중에 AcquireRequestState 개체를 만들고 채우고 HttpSessionStateContainer 현재 HttpContext개체에 할당합니다. 요청이 끝날 때 이벤트 중에 ReleaseRequestState 현재 SessionStateModuleHttpContext 개체를 검색 HttpSessionStateContainer 하고 세션 저장소에 세션 값을 쓰거나 세션을 중단하는 등 필요한 세션 작업을 수행합니다. 리디렉션 SessionStateModule 을 통해 요청이 갑자기 종료되는 경우 메서드를 호출하여 동일한 정리를 EndRequest 수행합니다.

사용자 지정 세션 상태 컨테이너를 만들려면 인터페이스를 구현하는 클래스를 IHttpSessionState 만듭니다. 사용자 고유의 사용자 지정 세션 상태 컨테이너를 만드는 경우 사용자 지정 모듈로 바꿔 SessionStateModule 야 합니다. 사용자 지정 모듈은 사용자 지정 세션 상태 컨테이너의 인스턴스를 만들고 메서드를 사용하여 현재 HttpContext 컨테이너에 AddHttpSessionStateToContext 추가합니다. 사용자 지정 세션 상태 모듈의 예는 클래스 개요에 SessionStateUtility 포함되어 있습니다.

속성

Name Description
CodePage

현재 세션의 코드 페이지 식별자를 가져오거나 설정합니다.

CookieMode

애플리케이션이 쿠키 없는 세션에 대해 구성되었는지 여부를 나타내는 값을 가져옵니다.

Count

세션 상태 항목 컬렉션의 항목 수를 가져옵니다.

IsCookieless

세션 ID가 URL에 포함되는지 또는 HTTP 쿠키에 저장되었는지 여부를 나타내는 값을 가져옵니다.

IsNewSession

현재 요청으로 세션이 만들어졌는지 여부를 나타내는 값을 가져옵니다.

IsReadOnly

세션이 읽기 전용인지 여부를 나타내는 값을 가져옵니다.

IsSynchronized

세션 상태 값 컬렉션에 대한 액세스가 동기화되는지 여부를 나타내는 값을 가져옵니다(스레드로부터 안전).

Item[Int32]

숫자 인덱스별로 세션 상태 항목 값을 가져오거나 설정합니다.

Item[String]

이름으로 세션 상태 항목 값을 가져오거나 설정합니다.

Keys

세션 상태 항목 컬렉션에 저장된 모든 값에 대한 키 컬렉션을 가져옵니다.

LCID

현재 세션의 LCID(로캘 식별자)를 가져오거나 설정합니다.

Mode

현재 세션 상태 모드를 가져옵니다.

SessionID

세션의 고유 세션 식별자를 가져옵니다.

StaticObjects

ASP.NET 애플리케이션 파일 Global.asax 내에서 태그로 선언된 <object Runat="Server" Scope="Session"/> 개체의 컬렉션을 가져옵니다.

SyncRoot

세션 상태 값 컬렉션에 대한 액세스를 동기화하는 데 사용할 수 있는 개체를 가져옵니다.

Timeout

세션 상태 공급자가 세션을 종료하기 전에 요청 간에 허용되는 제한 시간(분)을 가져오거나 설정합니다.

메서드

Name Description
Abandon()

현재 세션을 종료합니다.

Add(String, Object)

세션 상태 컬렉션에 새 항목을 추가합니다.

Clear()

세션 상태 항목 컬렉션에서 모든 값을 지웁니다.

CopyTo(Array, Int32)

배열의 지정된 인덱스에서 시작하여 세션 상태 항목 값의 컬렉션을 1차원 배열에 복사합니다.

GetEnumerator()

현재 세션의 모든 세션 상태 항목 값을 읽는 데 사용할 수 있는 열거자를 반환합니다.

Remove(String)

세션 상태 항목 컬렉션에서 항목을 삭제합니다.

RemoveAll()

세션 상태 항목 컬렉션에서 모든 값을 지웁니다.

RemoveAt(Int32)

세션 상태 항목 컬렉션에서 지정된 인덱스의 항목을 삭제합니다.

적용 대상

추가 정보