SessionStateStoreProviderBase Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Define os membros necessários de um fornecedor 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 um exemplo de implementação de um fornecedor de armazenamento em estado de sessão, veja Implementar um Fornecedor de Loja Session-State.
O exemplo de código seguinte mostra o ficheiro Web.config para uma aplicação ASP.NET configurada para usar um fornecedor de armazenamento personalizado de estado de sessão.
<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>
Observações
O estado de sessão ASP.NET lê e escreve dados de sessão a partir e para um armazenamento de dados usando um fornecedor de armazenamento de estado de sessão. Um fornecedor de armazenamento de estado de sessão é uma classe que herda a SessionStateStoreProviderBase classe abstrata e sobrepõe os seus membros com implementações específicas para o armazenamento de dados. O fornecedor de armazenamento de estado de sessão é chamado pela classe SessionStateModule durante o processamento de uma página de ASP.NET para comunicar com o armazenamento de dados para o armazenamento e recuperação de variáveis de sessão e informações relacionadas da sessão, como o valor de time-out.
Os dados de sessão dentro de cada ASP.NET aplicação são armazenados separadamente para cada propriedade SessionID. As aplicações ASP.NET não partilham dados de sessão.
Pode especificar uma implementação personalizada SessionStateStoreProviderBase para uma aplicação ASP.NET definindo o atributo mode do elemento de configuração sessionState para Custom e o atributo customProvider para o nome do fornecedor personalizado, como mostrado no exemplo deste tópico.
Bloqueio dos Dados de Armazenamento de Sessão
Como as aplicações ASP.NET são multithread para suportar a resposta a pedidos concorrentes, é possível que pedidos concorrentes tentem aceder à mesma informação da sessão. Considere um cenário em que múltiplas tramas num conjunto de frames acedem todas à mesma aplicação. Os pedidos separados para cada frame no frameset podem ser executados simultaneamente no servidor Web em diferentes threads. Se as páginas ASP.NET de cada fonte de frame acedirem às variáveis de estado da sessão, então pode haver múltiplas threads a aceder simultaneamente à memória da sessão.
Para evitar colisões de dados na loja de sessões e comportamentos inesperados de estado de sessão, as classes SessionStateModule e SessionStateStoreProviderBase incluem funcionalidades de bloqueio que bloqueiam exclusivamente o item de armazenamento de sessão para uma sessão específica durante a execução de uma página de ASP.NET. Note-se que, mesmo que o atributo EnableSessionState esteja marcado como ReadOnly, outras páginas de ASP.NET na mesma aplicação podem conseguir escrever na loja de sessão, pelo que um pedido de dados de sessão só leitura à loja pode acabar por esperar que os dados bloqueados sejam libertados.
Um bloqueio é definido nos dados de armazenamento de sessão no início do pedido, na chamada ao GetItemExclusive método. Quando o pedido é concluído, o bloqueio é libertado durante a chamada ao SetAndReleaseItemExclusive método.
Se o SessionStateModule objeto encontrar dados de sessão bloqueados durante a chamada para o GetItemExclusive ou para o GetItem método, irá solicitar novamente os dados da sessão em intervalos de meio segundo até que o bloqueio seja libertado ou o tempo em que os dados da sessão foram bloqueados exceda o valor da ExecutionTimeout propriedade. Se o tempo de expiração de execução for ultrapassado, o SessionStateModule objeto chamará o ReleaseItemExclusive método para libertar os dados de armazenamento de sessão e solicitará os dados de armazenamento de sessão nesse momento.
Como os dados de armazenamento de sessão bloqueados podem ter sido libertados por uma chamada ao ReleaseItemExclusive método numa thread separada antes da chamada ao SetAndReleaseItemExclusive método para a resposta atual, pode tentar-se definir e libertar dados de armazenamento de estado de sessão que já tenham sido libertados e modificados por outra sessão. Para evitar esta situação, os GetItem métodos e GetItemExclusive devolvem um identificador de bloqueio. Este identificador de bloqueio deve ser incluído em cada pedido para modificar os dados de armazenamento de sessão bloqueados. Os dados do armazenamento de sessão só são modificados se o identificador de bloqueio no armazenamento de dados corresponder ao identificador fornecido pelo SessionStateModulearquivo .
Eliminar Dados de Armazenamento de Sessão Expirados
Quando o Abandon método é chamado para uma sessão específica, os dados dessa sessão são eliminados do armazenamento de dados usando o RemoveItem método; caso contrário, os dados permanecerão no armazenamento de dados da sessão para servir futuras solicitações para a sessão. Cabe à SessionStateStoreProviderBase implementação eliminar dados de sessão expirados.
Construtores
| Name | Description |
|---|---|
| SessionStateStoreProviderBase() |
Inicializa uma nova instância da SessionStateStoreProviderBase classe. |
Propriedades
| Name | Description |
|---|---|
| Description |
Recebe uma descrição breve e amigável, adequada para exibição em ferramentas administrativas ou outras interfaces de utilizador (UIs). (Herdado de ProviderBase) |
| Name |
Recebe o nome amigável usado para se referir ao fornecedor durante a configuração. (Herdado de ProviderBase) |
Métodos
| Name | Description |
|---|---|
| CreateNewStoreData(HttpContext, Int32) |
Cria um novo SessionStateStoreData objeto para ser usado no pedido atual. |
| CreateUninitializedItem(HttpContext, String, Int32) |
Adiciona um novo item de estado de sessão ao armazenamento de dados. |
| Dispose() |
Liberta todos os recursos utilizados pela SessionStateStoreProviderBase implementação. |
| EndRequest(HttpContext) |
Chamado pelo SessionStateModule objeto no final de um pedido. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetItem(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions) |
Devolve dados de estado de sessão apenas de leitura do armazenamento de dados da sessão. |
| GetItemExclusive(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions) |
Devolve dados de estado de sessão apenas de 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 SessionStateModule objeto para inicialização por pedido. |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ReleaseItemExclusive(HttpContext, String, Object) |
Liberta um bloqueio num item no armazenamento de dados da sessão. |
| RemoveItem(HttpContext, String, Object, SessionStateStoreData) |
Apaga os dados dos itens do armazenamento de dados da sessão. |
| ResetItemTimeout(HttpContext, String) |
Atualiza a data e a hora de expiração de um item no armazenamento de dados da sessão. |
| SetAndReleaseItemExclusive(HttpContext, String, SessionStateStoreData, Object, Boolean) |
Atualiza a informação dos itens de sessão no armazenamento de dados de estado da sessão com valores do pedido atual e limpa o bloqueio dos dados. |
| SetItemExpireCallback(SessionStateItemExpireCallback) |
Define uma referência para o SessionStateItemExpireCallback delegado do |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |