Esta é a razão
Ao usar o estado da sessão baseada em cookie, o ASP.NET não aloca armazenamento para dados da sessão até que o objeto Session seja usado. Como resultado, um novo ID de sessão é gerado para cada solicitação de página até que o objeto da sessão seja acessado. Se seu aplicativo exigir um ID de sessão estático para toda a sessão, você poderá implementar o método Session_Start no arquivo Global.asax do aplicativo e armazenar dados no objeto Session para corrigir o ID da sessão ou usar código em outra parte do seu aplicativo para armazenar explicitamente dados no objeto Session.
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx
Então, basicamente, a menos que você acesse seu objeto de sessão no back-end, um novo sessionId será gerado com cada solicitação
EDITAR
Este código deve ser adicionado ao arquivo Global.asax. Ele adiciona uma entrada ao objeto Session para que você corrija a sessão até que ela expire.
protected void Session_Start(Object sender, EventArgs e)
{
Session["init"] = 0;
}
someid
a sessão, permanecerá o mesmo. Leve em consideração que esta resposta tem mais de 4 anos, não tenho certeza se houve alguma modificação em relação a isso.Há outro motivo, mais insidioso, por que isso pode ocorrer mesmo quando o objeto Session foi inicializado, como demonstrado pelo Cladudio.
No Web.config, se houver uma
<httpCookies>
entrada definida comorequireSSL="true"
mas você não estiver usando HTTPS: para uma solicitação específica, o cookie da sessão não será enviado (ou talvez não seja retornado, não sei ao certo) o que significa que você acaba com uma nova sessão para cada solicitação.Eu encontrei esse da maneira mais difícil, passando várias horas indo e voltando entre várias confirmações no meu controle de origem, até descobrir qual alteração específica havia quebrado o meu aplicativo.
fonte
No meu caso, descobri que o cookie da sessão tinha um domínio que incluía
www.
prefixo, enquanto solicitava uma página semwww.
.A adição
www.
ao URL imediatamente corrigiu o problema. Mais tarde, mudei o domínio do cookie para ser definido como em.mysite.com
vez dewww.mysite.com
.fonte
meu problema era que tínhamos esse conjunto no web.config
<httpCookies httpOnlyCookies="true" requireSSL="true" />
isso significa que, ao depurar em não SSL (o padrão), o cookie de autenticação não será enviado de volta ao servidor. isso significa que o servidor enviará um novo cookie de autenticação (com uma nova sessão) para cada solicitação de volta ao cliente.
a correção é definir o requiressl como false no web.config e true no web.release.config ou ativar o SSL durante a depuração:
fonte
Usando a resposta de Neville (excluindo requireSSL = true, em web.config) e modificando levemente o código de Joel Etherton, eis o código que deve lidar com um site que é executado no modo SSL e não SSL, dependendo do usuário e da página (I estou voltando ao código e ainda não o testei no SSL, mas espero que funcione - estará muito ocupado mais tarde para voltar a isso, então aqui está:
fonte
Outra possibilidade que faz com que o SessionID mude entre solicitações, mesmo quando Session_OnStart é definido e / ou uma Sessão foi inicializada, é que o nome do host da URL contenha um caractere inválido (como um sublinhado). Acredito que isso seja específico do IE (não verificado), mas se o seu URL for, digamos, o
http://server_name/app
IE bloqueará todos os cookies e as informações da sua sessão não estarão acessíveis entre solicitações.De fato, cada solicitação gerará uma sessão separada no servidor; portanto, se sua página contiver várias imagens, tags de script, etc., cada uma dessas solicitações GET resultará em uma sessão diferente no servidor.
Mais informações: http://support.microsoft.com/kb/316112
fonte
No meu caso, isso estava acontecendo muito nos meus ambientes de desenvolvimento e teste. Depois de tentar todas as soluções acima sem sucesso, descobri que era possível corrigir esse problema excluindo todos os cookies de sessão. A extensão do desenvolvedor da web facilita muito isso. Eu uso principalmente o Firefox para testes e desenvolvimento, mas isso também aconteceu durante os testes no Chrome. A correção também funcionou no Chrome.
Ainda não precisei fazer isso no ambiente de produção e não recebi nenhum relatório de pessoas que não conseguiam fazer login. Isso também pareceu acontecer depois de tornar os cookies da sessão seguros. Isso nunca aconteceu no passado quando eles não estavam seguros.
fonte
no meu caso, foi porque eu estava modificando a sessão após o redirecionamento de um gateway em um aplicativo externo ; portanto, porque estava usando o IP no host local naquela URL da página, na verdade era considerado site diferente com sessões diferentes.
Em suma
fonte
Meu problema foi com um aplicativo IPTV do Microsoft MediaRoom. Acontece que os aplicativos MRF MPF não suportam cookies; mudar para usar sessões sem cozinhar na web.config resolveu meu problema
Aqui está um artigo MUITO antigo: Cookieless ASP.NET
fonte
Estou no .NET Core 2.1 e estou ciente de que a pergunta não é sobre o Core. No entanto, a internet está faltando e o Google me trouxe aqui, esperando salvar alguém por algumas horas.
Startup.cs
client.js
Controllers/LoginController.cs
Observe que a sessão de gravação e leitura funciona, mas nenhum cookie parece ser passado para o navegador. Pelo menos não consegui encontrar um cabeçalho "Set-Cookie" em lugar nenhum.
fonte
Isso estava mudando para mim a partir do .NET 4.7.2 e era devido à propriedade SameSite no cookie da sessão. Veja aqui para mais informações: https://devblogs.microsoft.com/aspnet/upcoming-samesite-cookie-changes-in-asp-net-and-asp-net-core/
O valor padrão foi alterado para "Relaxado" e começou a quebrar as coisas. Eu mudei para "None" e as coisas funcionaram como esperado.
fonte
Certifique-se de que você não tenha um tempo limite de sessão muito curto e também se estiver usando sessões baseadas em cookies que esteja aceitando a sessão.
A barra de ferramentas do FireFox webDeveloperTool é útil em momentos como esse, pois você pode ver os cookies definidos para o seu aplicativo.
fonte
A redefinição do ID da sessão pode ter várias causas. No entanto, qualquer um dos mencionados acima não se relaciona com o meu problema. Então eu vou descrevê-lo para referência futura.
No meu caso, uma nova sessão criada em cada solicitação resultou em um loop de redirecionamento infinito. A ação de redirecionamento ocorre no evento OnActionExecuting .
Também estive limpando todos os cabeçalhos http (também no evento OnActionExecuting usando Response.ClearHeaders método ) para evitar o cache de sites no lado do cliente. Mas esse método limpa todos os cabeçalhos, incluindo informações sobre a sessão do usuário e, consequentemente, todos os dados no armazenamento Temp (que eu estava usando posteriormente no programa). Portanto, mesmo a configuração de nova sessão no evento Session_Start não ajudou.
Para resolver meu problema, assegurei-me de não remover os cabeçalhos quando ocorrer um redirecionamento.
Espero que ajude alguém.
fonte
Encontrei esta questão de uma maneira diferente. Os controladores que tinham esse atributo
[SessionState(SessionStateBehavior.ReadOnly)]
estavam lendo de uma sessão diferente, embora eu tenha definido um valor na sessão original na inicialização do aplicativo. Eu estava adicionando o valor da sessão através do _layout.cshtml (talvez não seja a melhor ideia?)Foi claramente o ReadOnly que causou o problema, porque quando removi o atributo, a sessão original (e o SessionId) permaneceriam intactos. Usando a solução de Claudio / Microsoft, foi corrigido.
fonte