ISessionIDManager Интерфейс

Определение

Определяет контракт, который должен быть реализован настраиваемым диспетчером ИД состояний сеансов.

public interface class ISessionIDManager
public interface ISessionIDManager
type ISessionIDManager = interface
Public Interface ISessionIDManager
Производный

Примеры

В следующем примере кода показан класс, реализующий диспетчер идентификаторов сеансов на основе файлов cookie.

using System;
using System.Configuration;
using System.Web.Configuration;
using System.Web;
using System.Web.SessionState;

namespace Samples.AspNet.Session
{

  public class MySessionIDManager : IHttpModule, ISessionIDManager
  {

    private SessionStateSection pConfig = null;

    //
    // IHttpModule Members
    //

    //
    // IHttpModule.Init
    //

    public void Init(HttpApplication app)
    {
      // Obtain session-state configuration settings.

      if (pConfig == null)
      {
        Configuration cfg =
          WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
        pConfig = (SessionStateSection)cfg.GetSection("system.web/sessionState");
      }
    }

    //
    // IHttpModule.Dispose
    //

    public void Dispose()
    {
    }

    //
    // ISessionIDManager Members
    //

    //
    // ISessionIDManager.Initialize
    //

    public void Initialize()
    {
    }

    //
    // ISessionIDManager.InitializeRequest
    //

    public bool InitializeRequest(HttpContext context, 
                                  bool suppressAutoDetectRedirect, 
                                  out bool supportSessionIDReissue)
    {
      if (pConfig.Cookieless == HttpCookieMode.UseCookies)
      {
        supportSessionIDReissue = false;
        return false;
      }
      else
      {
        supportSessionIDReissue = true;
        return context.Response.IsRequestBeingRedirected;
      }
    }

    //
    // ISessionIDManager.GetSessionID
    //
    public string GetSessionID(HttpContext context)
    {
      string id = null;

      if (pConfig.Cookieless == HttpCookieMode.UseUri)
      {
        // Retrieve the SessionID from the URI.
      }
      else
      {
        id = context.Request.Cookies[pConfig.CookieName].Value;
      }      

      // Verify that the retrieved SessionID is valid. If not, return null.

      if (!Validate(id))
        id = null;

      return id;
    }

    //
    // ISessionIDManager.CreateSessionID
    //

    public string CreateSessionID(HttpContext context)
    {
      return Guid.NewGuid().ToString();
    }

    //
    // ISessionIDManager.RemoveSessionID
    //

    public void RemoveSessionID(HttpContext context)
    {
      context.Response.Cookies.Remove(pConfig.CookieName);
    }

    //
    // ISessionIDManager.SaveSessionID
    //

    public void SaveSessionID(HttpContext context, string id, out bool redirected, out bool cookieAdded)
    {
      redirected = false;
      cookieAdded = false;

      if (pConfig.Cookieless == HttpCookieMode.UseUri)
      {
        // Add the SessionID to the URI. Set the redirected variable as appropriate.

        redirected = true;
        return;
      }
      else
      {
        context.Response.Cookies.Add(new HttpCookie(pConfig.CookieName, id));
        cookieAdded = true;
      }
    }

    //
    // ISessionIDManager.Validate
    //

    public bool Validate(string id)
    {
      try
      {
        Guid testGuid = new Guid(id);

        if (id == testGuid.ToString())
          return true;
      }
      catch
      {
      }

      return false;
    }
  }
}
Imports System.Configuration
Imports System.Web.Configuration
Imports System.Web
Imports System.Web.SessionState


Namespace Samples.AspNet.Session


  Public Class MySessionIDManager
    Implements IHttpModule, ISessionIDManager

    Private pConfig As SessionStateSection = Nothing

    '
    ' IHttpModule Members
    '

    '
    ' IHttpModule.Init
    '

    Public Sub Init(app As HttpApplication) Implements IHttpModule.Init
    
      ' Obtain session-state configuration settings.

      If pConfig Is Nothing Then      
        Dim cfg As System.Configuration.Configuration = _
          WebConfigurationManager.OpenWebConfiguration( _
            System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath)
        pConfig = CType(cfg.GetSection("system.web/sessionState"), SessionStateSection)
      End If

    End Sub


    '
    ' IHttpModule.Dispose
    '

    Public Sub Dispose() Implements IHttpModule.Dispose
    
    End Sub



    '
    ' ISessionIDManager.Initialize
    '

    Public Sub Initialize() Implements ISessionIDManager.Initialize

    End Sub


    '
    ' ISessionIDManager.InitializeRequest
    '

    Public Function InitializeRequest(context As HttpContext,  _
                                      suppressAutoDetectRedirect As Boolean,  _
                                      ByRef supportSessionIDReissue As Boolean) As Boolean _
                                      Implements ISessionIDManager.InitializeRequest

      If pConfig.Cookieless = HttpCookieMode.UseCookies Then
        supportSessionIDReissue = False
        Return False
      Else
        supportSessionIDReissue = True
        Return context.Response.IsRequestBeingRedirected
      End If
    End Function



    '
    ' ISessionIDManager Members
    '


    '
    ' ISessionIDManager.GetSessionID
    '
    Public Function GetSessionID(context As HttpContext) As String _
      Implements ISessionIDManager.GetSessionID
    
      Dim id As String = Nothing

      If pConfig.Cookieless = HttpCookieMode.UseUri Then
        ' Retrieve the SessionID from the URI.
      Else
        id = context.Request.Cookies(pConfig.CookieName).Value
      End If    

      ' Verify that the retrieved SessionID is valid. If not, return Nothing.

      If Not Validate(id) Then _
        id = Nothing

      Return id
    End Function

    '
    ' ISessionIDManager.CreateSessionID
    '

    Public Function CreateSessionID(context As HttpContext) As String _
      Implements ISessionIDManager.CreateSessionID
    
      Return Guid.NewGuid().ToString()
    End Function

    '
    ' ISessionIDManager.RemoveSessionID
    '

    Public Sub RemoveSessionID(context As HttpContext) _
      Implements ISessionIDManager.RemoveSessionID

      context.Response.Cookies.Remove(pConfig.CookieName)

    End Sub


    '
    ' ISessionIDManager.SaveSessionID
    '

    Public Sub SaveSessionID(context As HttpContext, _
                             id As String, _
                             ByRef redirected As Boolean, _
                             ByRef cookieAdded As Boolean) _
      Implements ISessionIDManager.SaveSessionID
    
      redirected = False
      cookieAdded = False

      If pConfig.Cookieless = HttpCookieMode.UseUri Then

        ' Add the SessionID to the URI. Set the redirected variable as appropriate.

        redirected = True
        Return
      Else
        context.Response.Cookies.Add(New HttpCookie(pConfig.CookieName, id))
        cookieAdded = True
      End If
    End Sub


    '
    ' ISessionIDManager.Validate
    '

    Public Function Validate(id As String) As Boolean _
      Implements ISessionIDManager.Validate
    
      Try
        Dim testGuid As Guid = New Guid(id)

        If id = testGuid.ToString() Then _
          Return True
      Catch
      
      End Try

      Return False
    End Function

  End Class
End Namespace

Комментарии

Интерфейс ISessionIDManager определяет методы, которые необходимо реализовать для создания пользовательского диспетчера для значений идентификатора сеанса. Реализация ISessionIDManager интерфейса создает и проверяет значения идентификатора сеанса, а также управляет хранением идентификатора сеанса в HTTP-ответе, а также получением значения идентификатора сеанса из HTTP-запроса. Настраиваемый диспетчер идентификаторов сеансов включается sessionIDManagerType с помощью атрибута элемента конфигурации sessionState Element (ASP.NET Settings Schema).

Если реализация ISessionIDManager интерфейса поддерживает идентификаторы сеансов без файлов cookie, необходимо реализовать решение для отправки и извлечения идентификаторов сеансов в URL-адресе, например фильтр ISAPI.

Если требуется указать только пользовательские значения идентификатора сеанса, которые будут использоваться ASP.NET состоянии сеанса, можно создать класс, который наследует SessionIDManager класс и переопределить только CreateSessionID методы и Validate с помощью собственной пользовательской реализации. Это позволяет предоставлять собственные значения идентификатора сеанса, полагаясь на базовый SessionIDManager класс для хранения значений в HTTP-ответе и получения значений из HTTP-запроса. Пример переопределения SessionIDManager класса и реализации этих методов см. в примере, предоставленном CreateSessionID для метода SessionIDManager класса .

Методы

CreateSessionID(HttpContext)

Создает уникальный идентификатор сеанса.

GetSessionID(HttpContext)

Возвращает идентификатор сеанса из контекста текущего HTTP-запроса.

Initialize()

Выполняет инициализацию объекта SessionIDManager.

InitializeRequest(HttpContext, Boolean, Boolean)

Выполняет инициализацию объекта SessionIDManager по запросу.

RemoveSessionID(HttpContext)

Удаляет идентификатор сеанса из файла Cookie или URL-адреса.

SaveSessionID(HttpContext, String, Boolean, Boolean)

Сохраняет созданный новый идентификатор в HTTP-ответе.

Validate(String)

Подтверждает допустимость предоставленного идентификатора сеанса.

Применяется к

См. также раздел