Udostępnij za pośrednictwem


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 stanu 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żna określić niestandardową SessionStateStoreProviderBase implementację dla aplikacji ASP.NET, ustawiając mode atrybut elementu sessionStateCustom konfiguracji na i customProvider atrybut na nazwę dostawcy niestandardowego, jak pokazano w przykładzie tego tematu.

Blokowanie danych magazynu sesji

Ponieważ ASP.NET aplikacje są wielowątkowe do obsługi odpowiedzi 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ła ramki, może być 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, SessionStateModule klasy i SessionStateStoreProviderBase obejmują funkcje blokady, które wyłącznie blokuje element magazynu sesji dla określonej sesji na czas 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 zapisywać 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 GetItemExclusive metody lub GetItem metody, ponownie zażąda danych sesji w połowie sekundy, dopóki blokada nie zostanie zwolniona lub czas, przez jaki dane sesji zostały zablokowane, przekracza 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ć zwolnione przez wywołanie metody w osobnym wątku przed wywołaniem ReleaseItemExclusiveSetAndReleaseItemExclusive metody dla bieżącej odpowiedzi, można spróbować ustawić i zwolnić dane magazynu stanu sesji, które zostały już zwolnione 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, aby zmodyfikować zablokowane dane magazynu sesji. Dane magazynu sesji są modyfikowane tylko wtedy, gdy identyfikator blokady w magazynie danych jest zgodny z identyfikatorem blokady dostarczonym SessionStateModuleprzez program .

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ń 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ływana 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 wartość bieżącego wystąpienia.

(Odziedziczone po Object)
Initialize(String, NameValueCollection)

Inicjuje konstruktora konfiguracji.

(Odziedziczone po ProviderBase)
InitializeRequest(HttpContext)

Wywoływana SessionStateModule przez obiekt do inicjowania poszczególnych żądań.

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)

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

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

Aktualizuje 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 SessionStateItemExpireCallbackSession_OnEnd dla zdarzenia zdefiniowanego w pliku Global.asax.

ToString()

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

(Odziedziczone po Object)

Dotyczy

Zobacz też