A sessão distribuída é uma maneira de armazenar o estado da sessão fora do aplicativo ASP.NET Core. Usar o Couchbase para armazenar o estado da sessão pode ajudá-lo quando você precisar dimensionar seu site, especialmente se não quiser usar o sessões fixas.
Você pode acompanhar os exemplos de código que criei, disponíveis em GitHub.
Observe que o Couchbase.Extensions.Session é uma versão beta no momento em que este artigo foi escrito.
O que é estado de sessão?
O estado da sessão é simplesmente uma forma de armazenar dados de um determinado usuário. Normalmente, um token é armazenado em um cookie de usuário, e esse token funciona como uma chave para algum conjunto de dados no lado do servidor.
Como ativar a sessão no ASP.NET
Se você estiver familiarizado com ASP.NET ou ASP Classic, isso é feito usando Sessão
. Todo o trabalho do cookie é feito nos bastidores, portanto, basta usar Sessão
como um dicionário para armazenar e recuperar os dados que você desejar.
1 2 |
se(Sessão["IsLoggedIn"] = falso) Sessão["Nome de usuário"] = "matt"; |
Por padrão, no ASP.NET e no ASP Classic, essas informações são armazenadas na memória, como parte do processo do aplicativo Web.
No ASP.NET Core, você também pode optar por isso configurando a sessão com AddSession
.
Primeiro, em Startup.cs, na seção Configurar
diga ao ASP.NET Core para usar a sessão:
1 |
aplicativo.UseSession(); |
Então, no ConfigureServices
função, use AddSession
para adicionar um serviço de provedor de sessão.
1 2 |
serviços.AddDistributedMemoryCache(); serviços.AddSession(); |
(Isso usará as configurações de sessão padrão, consulte a seção Documentação do ASP.NET Core para obter mais informações).
O que é gerenciamento de sessão no ASP.NET Core?
Uma sessão distribuída é uma maneira de armazenar o estado da sessão fora do aplicativo ASP.NET Core. Usar o Couchbase para armazenar o estado da sessão pode ajudá-lo quando você precisar dimensionar seu site, especialmente se não quiser usar sessões fixas.
Por que o gerenciamento distribuído de sessões?
No entanto, se você estiver ampliando seu aplicativo Web com vários servidores Web, terá de tomar algumas decisões sobre a sessão. Se você continuar a usar a sessão em processo, deverá configurar sessões fixas (o primeiro servidor da Web que o usuário acessar é aquele que ele "manterá" para as solicitações subsequentes). Isso tem algumas possíveis desvantagens (consulte este tópico no ServerFault e este artigo na revista TechNet da Microsoft).
Se você não quiser usar sessões fixas, não poderá usar a opção de sessão em processo. Em vez disso, você precisará usar uma sessão distribuída. Há muitas opções de onde colocar os dados da sessão, mas a arquitetura do Couchbase que prioriza a memória e os recursos flexíveis de dimensionamento fazem dele uma boa escolha.
Usando a sessão distribuída no ASP.NET Core
Antes de começar a escrever o código, você precisará de um cluster do Couchbase Server em execução com um bucket (chamei o meu de "sessionstore"). Também será necessário criar um usuário com permissão de Data Reader e Data Writer no bucket (também chamei meu usuário de "sessionstore" para simplificar as coisas).
Adição de Couchbase.Extensions.Session
Agora, abra seu aplicativo ASP.NET Core no Visual Studio. (Criei um novo aplicativo ASP.NET Core MVC, que que você pode encontrar no GitHub). Em seguida, com o NuGet, instale a biblioteca Couchbase.Extensions.Session:
- Use a interface do usuário NuGet (veja abaixo) ou
Instalar o pacote Couchbase.Extensions.Session -Versão 1.0.0-beta2
com o Gerenciador de pacotes, oudotnet add package Couchbase.Extensions.Session --versão 1.0.0-beta2
com a linha de comando do dotnet
Configuração do Couchbase
Para configurar o provedor de sessão, você escreverá um código que parece familiar se você estiver acompanhando esta série sobre o Couchbase.Extensions.
O ConfigureServices
em Startup.cs é onde você adicionará o código de configuração.
Primeiro, use AddCouchbase
que é feito com o Injeção de dependência extensão.
Depois disso, configure o cache distribuído para o Couchbase com AddDistributedCouchbaseCache
que abordei em uma postagem do blog sobre cache distribuído.
1 2 3 4 5 6 |
serviços.AddCouchbase(optar => { optar.Servidores = novo Lista<Uri> { novo Uri("http://localhost:8091") }; }); serviços.AddDistributedCouchbaseCache("sessionstore", "senha", optar => { }); |
Por fim, configure o Couchbase como um armazenamento de sessão com AddCouchbaseSession
.
1 2 3 4 5 |
serviços.AddCouchbaseSession(optar => { optar.CookieName = ".MyApp.Cookie"; optar.IdleTimeout = novo Tempo(0, 0, 20, 0); }); |
Você pode configurar o tempo limite de inatividade (quanto tempo falta para a sessão expirar depois de não ser usada), o nome do cookie e muito mais, se necessário. No exemplo acima, configurei o tempo limite para 20 minutos e o nome do cookie para ".MyApp.Cookie".
Gravação em uma sessão distribuída
Para acessar os dados da sessão, você pode usar HttpContext.Session
.
Primeiro, quero escrever algo para a sessão. Em uma Sobre
usei a ação do controlador SetObject
método:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
público IActionResult Sobre() { HttpContext.Sessão.SetObject("sessionkey", novo { Nome = "Matt", Twitter = "@mgroves", Guia = DateTime.Agora }); Exibir dados["Mensagem"] = "Coloquei um valor em sua sessão. Clique em 'Contato' para vê-lo."; retorno Ver(); } |
Desse ponto em diante, sempre que você clicar para exibir a página "Sobre", um novo valor será armazenado na sessão com a chave "sessionkey". Se você mudar para o Console do Couchbase, poderá ver os dados que estão sendo armazenados.
Observe que a sessão de um usuário é representada por um único documento. Portanto, se eu inserisse outro valor de sessão (como abaixo), esse valor seria armazenado no mesmo documento.
1 2 3 4 5 6 |
HttpContext.Sessão.SetObject("sessionkey2", novo { Endereço = "123 Main St", Cidade = "Lancaster", Estado = "OH" }); |
O documento resultante teria a seguinte aparência:
Você deve ter cuidado para não exagerar na quantidade de dados que coloca na sessão, pois os documentos do Couchbase são limitados a 20 MB.
Leitura de uma sessão distribuída
Para obter um valor da sessão, você pode usar GetObject
e fornecer a chave de sessão. No código de exemplo, fiz isso na seção Contato
ação:
1 2 3 4 5 6 |
público IActionResult Contato() { Exibir dados["Mensagem"] = HttpContext.Sessão.GetObject<dinâmico>("sessionkey"); retorno Ver(); } |
Depois de visitar a página "Sobre" pelo menos uma vez, vá para a página "Contato". Você deverá ver o objeto de sessão impresso na página.
É basicamente isso. Há alguns outros métodos relativamente óbvios disponíveis em Sessão
. Eles também são descrito na documentação do ASP.NET Core.
Mais uma coisa: nomeei o cookie (".MyApp.Cookie"). Você pode visualizar esse cookie no navegador de sua preferência. No Chrome, use Ctrl+Shift+I e navegue até a guia "Application" (Aplicativo). Você verá o cookie e seu valor.
Em geral, você não precisa conhecer esse detalhe no seu dia a dia como desenvolvedor do ASP.NET Core, mas é bom saber como as coisas funcionam, por precaução.
Resumo
A extensão de sessão distribuída para o Couchbase é outra ferramenta em sua caixa para ajudar a dimensionar seus aplicativos ASP.NET Core. Essas práticas extensões .NET ajudam a demonstrar como o Couchbase é a solução ideal para o seu negócio. banco de dados de engajamento plataforma de que você precisa.
Se você tiver perguntas ou comentários sobre as extensões do Couchbase, não deixe de conferir o Repositório do GitHub ou o Fóruns do SDK do Couchbase .NET.
E entre em contato comigo se tiver dúvidas sobre tudo relacionado a .NET e Couchbase, deixando um comentário abaixo ou encontrando-me em Twitter @mgroves.