SessionStateStoreProviderBase Klasa

Definicja

Definiuje wymagane elementy członkowskie dostawcy stanu sesji dla magazynu danych.

public ref class SessionStateStoreProviderBase abstract : System::Configuration::Provider::ProviderBase
public abstract class SessionStateStoreProviderBase : System.Configuration.Provider.ProviderBase
type SessionStateStoreProviderBase = class
    inherit ProviderBase
Public MustInherit Class SessionStateStoreProviderBase
Inherits ProviderBase
Dziedziczenie
SessionStateStoreProviderBase

Przykłady

Aby zapoznać się z przykładem implementacji dostawcy magazynu stanów sesji, zobacz Implementowanie dostawcy magazynu Session-State.

Poniższy przykład kodu przedstawia plik Web.config dla aplikacji ASP.NET skonfigurowanej do używania niestandardowego dostawcy magazynu stanów sesji.

<configuration>
  <connectionStrings>
    <add name="OdbcSessionServices" connectionString="DSN=SessionState;" />
  </connectionStrings>

  <system.web>
    <sessionState
      mode="Custom"
      customProvider="OdbcSessionProvider">
      <providers>
        <add name="OdbcSessionProvider"
             type="Samples.AspNet.Session.OdbcSessionStateStore"
             connectionStringName="OdbcSessionServices" />
      </providers>
    </sessionState>
  </system.web>
</configuration>

Uwagi

ASP.NET stan sesji odczytuje i zapisuje dane sesji z i do magazynu danych przy użyciu dostawcy magazynu stanów sesji. Dostawca magazynu stanów sesji to klasa, która dziedziczy SessionStateStoreProviderBase klasę abstrakcyjną i zastępuje jej składowe implementacjami specyficznymi dla magazynu danych. Dostawca magazynu stanów sesji jest wywoływany przez klasę SessionStateModule podczas przetwarzania strony ASP.NET w celu komunikowania się z magazynem danych dla magazynu i pobierania zmiennych sesji i powiązanych informacji sesji, takich jak wartość limitu czasu.

Dane sesji w każdej aplikacji ASP.NET są przechowywane oddzielnie dla każdej SessionID właściwości. ASP.NET aplikacje nie udostępniają danych sesji.

Możesz określić niestandardową SessionStateStoreProviderBase implementację dla aplikacji ASP.NET, ustawiając mode atrybut sessionState elementu konfiguracji na Custom i customProvider atrybut na nazwę dostawcy niestandardowego, jak pokazano w przykładzie dla tego tematu.

Blokowanie danych magazynu sesji

Ponieważ aplikacje ASP.NET są wielowątkowane do obsługi reagowania na żądania współbieżne, możliwe, że współbieżne żądania mogą próbować uzyskać dostęp do tych samych informacji o sesji. Rozważmy scenariusz, w którym wiele ramek w zestawie ramek uzyskuje dostęp do tej samej aplikacji. Oddzielne żądania dla każdej ramki w zestawie ramek można wykonywać jednocześnie na serwerze sieci Web w różnych wątkach. Jeśli strony ASP.NET dla każdej zmiennej stanu sesji dostępu źródłowego ramki, można mieć wiele wątków, które uzyskują dostęp do magazynu sesji jednocześnie.

Aby uniknąć kolizji danych w magazynie sesji i nieoczekiwanym zachowaniu stanu sesji, klasy i SessionStateStoreProviderBase obejmują funkcje blokady, SessionStateModule które wyłącznie blokuje element magazynu sesji dla określonej sesji w czasie wykonywania strony ASP.NET. Należy pamiętać, że nawet jeśli EnableSessionState atrybut jest oznaczony jako ReadOnly, inne strony ASP.NET w tej samej aplikacji mogą być w stanie zapisać w magazynie sesji, więc żądanie danych sesji tylko do odczytu z magazynu może nadal czekać na zwolnienie zablokowanych danych.

Blokada jest ustawiana na danych magazynu sesji na początku żądania w wywołaniu GetItemExclusive metody . Po zakończeniu żądania blokada zostanie zwolniona podczas wywołania SetAndReleaseItemExclusive metody .

SessionStateModule Jeśli obiekt napotka zablokowane dane sesji podczas wywołania metody GetItemExclusive lub GetItem metody, będzie ponownie zażądać danych sesji w pół sekundy, dopóki blokada nie zostanie zwolniona lub ilość czasu, przez jaki dane sesji zostały zablokowane, przekroczy wartość ExecutionTimeout właściwości. Jeśli przekroczono limit czasu wykonywania, obiekt wywoła ReleaseItemExclusive metodę, SessionStateModule aby zwolnić dane magazynu sesji i zażądać danych magazynu sesji w tym czasie.

Ponieważ zablokowane dane magazynu sesji mogły zostać uwolnione przez wywołanie ReleaseItemExclusive metody w osobnym wątku przed wywołaniem SetAndReleaseItemExclusive metody dla bieżącej odpowiedzi, można podjąć próbę ustawienia i wydania danych magazynu stanu sesji, które zostały już wydane i zmodyfikowane przez inną sesję. Aby uniknąć tej sytuacji, GetItem metody i GetItemExclusive zwracają identyfikator blokady. Ten identyfikator blokady musi być dołączony do każdego żądania w celu zmodyfikowania zablokowanych danych magazynu sesji. Dane magazynu sesji są modyfikowane tylko wtedy, gdy identyfikator blokady w magazynie danych jest zgodny z identyfikatorem blokady dostarczonym przez usługę SessionStateModule.

Usuwanie wygasłych danych magazynu sesji

Abandon Gdy metoda jest wywoływana dla określonej sesji, dane dla tej sesji są usuwane z magazynu danych przy użyciu RemoveItem metody . W przeciwnym razie dane pozostaną w magazynie danych sesji do serwera przyszłych żądań sesji dla sesji. Do implementacji należy SessionStateStoreProviderBase usunięcie wygasłych danych sesji.

Konstruktory

SessionStateStoreProviderBase()

Inicjuje nowe wystąpienie klasy SessionStateStoreProviderBase.

Właściwości

Description

Pobiera krótki, przyjazny opis odpowiedni do wyświetlania w narzędziach administracyjnych lub innych interfejsach użytkownika (UI).

(Odziedziczone po ProviderBase)
Name

Pobiera przyjazną nazwę używaną do odwoływania się do dostawcy podczas konfiguracji.

(Odziedziczone po ProviderBase)

Metody

CreateNewStoreData(HttpContext, Int32)

Tworzy nowy SessionStateStoreData obiekt do użycia dla bieżącego żądania.

CreateUninitializedItem(HttpContext, String, Int32)

Dodaje nowy element stanu sesji do magazynu danych.

Dispose()

Zwalnia wszystkie zasoby używane przez implementację SessionStateStoreProviderBase .

EndRequest(HttpContext)

Wywoływane SessionStateModule przez obiekt na końcu żądania.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetItem(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions)

Zwraca dane stanu sesji tylko do odczytu z magazynu danych sesji.

GetItemExclusive(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions)

Zwraca dane stanu sesji tylko do odczytu z magazynu danych sesji.

GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
Initialize(String, NameValueCollection)

Inicjuje konstruktora konfiguracji.

(Odziedziczone po ProviderBase)
InitializeRequest(HttpContext)

Wywoływane SessionStateModule przez obiekt na potrzeby inicjowania żądania.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ReleaseItemExclusive(HttpContext, String, Object)

Zwalnia blokadę elementu w magazynie danych sesji.

RemoveItem(HttpContext, String, Object, SessionStateStoreData)

Usuwa dane elementów z magazynu danych sesji.

ResetItemTimeout(HttpContext, String)

Aktualizacje datę wygaśnięcia i godzinę elementu w magazynie danych sesji.

SetAndReleaseItemExclusive(HttpContext, String, SessionStateStoreData, Object, Boolean)

Aktualizacje informacje o elemencie sesji w magazynie danych stanu sesji z wartościami z bieżącego żądania i czyści blokadę danych.

SetItemExpireCallback(SessionStateItemExpireCallback)

Ustawia odwołanie do delegata SessionStateItemExpireCallback dla zdarzenia zdefiniowanego Session_OnEnd w pliku Global.asax.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Zobacz też