SessionStateStoreProviderBase Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Define os membros necessários de um provedor de estado de sessão para um armazenamento de dados.
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
- Herança
Exemplos
Para obter um exemplo de implementação de um provedor de repositório de estado de sessão, consulte Implementando um provedor de repositório de Session-State.
O exemplo de código a seguir mostra o arquivo Web.config para um aplicativo ASP.NET configurado para usar um provedor de repositório de estado de sessão personalizado.
<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>
Comentários
ASP.NET estado da sessão lê e grava dados de sessão de e para um armazenamento de dados usando um provedor de armazenamento de estado de sessão. Um provedor de repositório de estado de sessão é uma classe que herda a SessionStateStoreProviderBase classe abstrata e substitui seus membros por implementações específicas do armazenamento de dados. O provedor de repositório de estado de sessão é chamado pela SessionStateModule classe durante o processamento de uma página ASP.NET para se comunicar com o armazenamento de dados para o armazenamento e a recuperação de variáveis de sessão e informações de sessão relacionadas, como o valor de tempo limite.
Os dados de sessão em cada aplicativo ASP.NET são armazenados separadamente para cada SessionID propriedade. ASP.NET aplicativos não compartilham dados de sessão.
Você pode especificar uma implementação personalizada SessionStateStoreProviderBase para um aplicativo ASP.NET definindo o mode
atributo do elemento de sessionState
configuração como Custom e o customProvider
atributo para o nome do provedor personalizado, conforme mostrado no exemplo deste tópico.
Bloquear dados do repositório de sessão
Como ASP.NET aplicativos são multithreads para dar suporte à resposta a solicitações simultâneas, é possível que solicitações simultâneas possam tentar acessar as mesmas informações de sessão. Considere um cenário em que vários quadros em um conjunto de quadros acessam o mesmo aplicativo. As solicitações separadas para cada quadro no conjunto de quadros podem ser executadas no servidor Web simultaneamente em threads diferentes. Se o ASP.NET páginas para cada variável de estado de sessão de acesso de origem do quadro, você poderá ter vários threads acessando o repositório de sessão simultaneamente.
Para evitar colisões de dados no repositório de sessão e comportamento inesperado de estado de sessão, as SessionStateModule classes e SessionStateStoreProviderBase incluem a funcionalidade de bloqueio que bloqueia exclusivamente o item do repositório de sessão para uma sessão específica durante a execução de uma página ASP.NET. Observe que, mesmo que o EnableSessionState atributo seja marcado como ReadOnly
, outras páginas ASP.NET no mesmo aplicativo poderão ser capazes de gravar no repositório de sessão, portanto, uma solicitação para dados de sessão somente leitura do repositório ainda poderá acabar aguardando a liberação de dados bloqueados.
Um bloqueio é definido em dados de armazenamento de sessão no início da solicitação, na chamada para o GetItemExclusive método . Quando a solicitação for concluída, o bloqueio será liberado durante a chamada para o SetAndReleaseItemExclusive método .
Se o SessionStateModule objeto encontrar dados de sessão bloqueados durante a chamada para o GetItemExclusive método ou GetItem , ele solicitará novamente os dados da sessão em intervalos de meio segundo até que o bloqueio seja liberado ou a quantidade de tempo em que os dados da sessão foram bloqueados excederá o valor da ExecutionTimeout propriedade. Se o tempo limite de execução for excedido, o SessionStateModule objeto chamará o ReleaseItemExclusive método para liberar os dados do repositório de sessão e solicitar os dados do repositório de sessão nesse momento.
Como os dados bloqueados do repositório de sessão podem ter sido liberados por uma chamada para o ReleaseItemExclusive método em um thread separado antes da chamada para o SetAndReleaseItemExclusive método para a resposta atual, uma tentativa poderia ser feita para definir e liberar dados do repositório de estado de sessão que já foram liberados e modificados por outra sessão. Para evitar essa situação, os GetItem métodos e GetItemExclusive retornam um identificador de bloqueio. Esse identificador de bloqueio deve ser incluído em cada solicitação para modificar dados bloqueados do repositório de sessão. Os dados do repositório de sessão serão modificados somente se o identificador de bloqueio no armazenamento de dados corresponder ao identificador de bloqueio fornecido pelo SessionStateModule.
Excluindo dados expirados do repositório de sessão
Quando o Abandon método é chamado para uma sessão específica, os dados dessa sessão são excluídos do armazenamento de dados usando o RemoveItem método ; caso contrário, os dados permanecerão no armazenamento de dados da sessão para servidor de solicitações futuras para a sessão. Cabe à SessionStateStoreProviderBase implementação excluir dados de sessão expirados.
Construtores
SessionStateStoreProviderBase() |
Inicializa uma nova instância da classe SessionStateStoreProviderBase. |
Propriedades
Description |
Obtém uma breve descrição amigável adequada para exibição em ferramentas administrativas ou outras IUs (interfaces do usuário). (Herdado de ProviderBase) |
Name |
Obtém o nome amigável usado para referir-se ao provedor durante a configuração. (Herdado de ProviderBase) |
Métodos
CreateNewStoreData(HttpContext, Int32) |
Cria um novo objeto SessionStateStoreData a ser usado para a solicitação atual. |
CreateUninitializedItem(HttpContext, String, Int32) |
Adiciona um novo item de estado de sessão para o armazenamento de dados. |
Dispose() |
Libera todos os recursos usados pela implementação SessionStateStoreProviderBase. |
EndRequest(HttpContext) |
Chamado pelo SessionStateModule objeto ao final de uma solicitação. |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetItem(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions) |
Retorna os dados de estado de sessão somente leitura do armazenamento de dados da sessão. |
GetItemExclusive(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions) |
Retorna os dados de estado de sessão somente leitura do armazenamento de dados da sessão. |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
Initialize(String, NameValueCollection) |
Inicializa o construtor de configuração. (Herdado de ProviderBase) |
InitializeRequest(HttpContext) |
Chamado pelo objeto SessionStateModule para inicialização por solicitação. |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
ReleaseItemExclusive(HttpContext, String, Object) |
Libera um bloqueio em um item no armazenamento de dados da sessão. |
RemoveItem(HttpContext, String, Object, SessionStateStoreData) |
Exclui dados de item do armazenamento de dados da sessão. |
ResetItemTimeout(HttpContext, String) |
Atualiza a data e hora de validade de um item no armazenamento de dados da sessão. |
SetAndReleaseItemExclusive(HttpContext, String, SessionStateStoreData, Object, Boolean) |
Atualiza as informações do item de sessão no armazenamento de dados do estado de sessão com valores da solicitação atual e limpa o bloqueio nos dados. |
SetItemExpireCallback(SessionStateItemExpireCallback) |
Define uma referência para o delegado SessionStateItemExpireCallback para o evento |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |