O estado da sessão de compartilhamento entre 2 aplicativos ASP.NET usando o SQL Server
-
18-09-2019 - |
Pergunta
Estou trabalhando em um site que tem um requisito para compartilhar sessão entre um aplicativo CMS e um aplicativo de loja on -line no mesmo domínio, por exemplo.
mydomain.com
e
store.mydomain.com
Eu fiz algum progresso com ele e funciona na minha construção local entre
localhost/cms
e
localhost/store
Basicamente, eu fiz o que é sugerido neste artigo
e hackeou o procedimento armazenado do tempgetAppid para retornar o mesmo ID do aplicativo (1). Isso parece funcionar, pois cria sessões com IDs como 'abv5d2urx1asscfwuzw3wp4500000001', que é o que eu esperaria.
Meu problema é que, quando o implanto em nosso ambiente de teste, ele cria uma nova sessão quando navego entre os 2 sites. Então, quando inicio uma sessão no site do CMS, se eu navegar para a loja, ela cria uma nova sessão. Estes são configurados como 2 sites diferentes no IIS7.
Nos arquivos web.config para ambos os sites, os elementos e os dois são os mesmos e são os seguintes (menos informações confidenciais)
Alguém tem idéias por que isso pode não estar funcionando? Estou compartilhando a autenticação de formulários nos 2 sites e isso funciona bem. Qualquer ajuda ou sugestões são bem vindos!
Muito Obrigado
Dave
Solução
Parece que o problema que estávamos tendo era que o domínio de cookies da sessão estava sendo definido de maneira diferente nos 2 aplicativos. Isso significava que cada aplicativo gerou sua própria sessão.
Nós adicionamos<httpCookies domain=".ourdomain.co.uk" />
para o nosso web.config e isso parece ter resolvido isso. Obrigado pela ajuda, espero que isso ajude outra pessoa no futuro.
Outras dicas
Persiste todos os dados da sessão no SQL-Server, usando o ID da sessão como chave. Em seguida, use um cookie contendo o ID da sessão que aponta para .mydomain.com
Portanto, estará disponível nos dois subdomínios.
este artigo em 15 segundos cobre o assunto e até mostra uma técnica para compartilhar sessões em domínios completamente diferentes.