Usuário com melhor resposta
problemas ao fazer logout com session e cookie

Pergunta
-
galera é o seguinte quando vou clicar em logout em minha app web tem o seguinte codigo
Ex:
session.clear();
forms.logout;
coockie = expires
Não lembro de cabeça o código mas é + ou - isso.
O problema é se eu tenho duas abas abertas no sistema mas com usuarios diferentes quando faço logout com um e o outro atualizar a página dele faz logout tmb, como faço para resolver isso.
- Tipo Alterado Seilor Bonancio JuniorModerator quinta-feira, 9 de fevereiro de 2012 20:15
Respostas
-
"[...]Isso porque quando você abre mais de uma tab, elas compartilham a mesma session.[...]"
Boas Fabricio,
Isso que vocês escreveu está errado.
O que é partilhado entre os tabs do mesmo browser são as Cookies.
Porém ... se não tiver configurado o SessionState como Cookieless a chave de sessão será preservada entre posts num cookie o que provoca, quando os cookies são invalidados, o comportamento descrito pelo Thiago.
Para evitar este problema bastará seguir as seguintes indicações:
- configurar, web.config, o SessionState como cookieless:
<sessionState cookieless="UseUri" />
- garantir que os links gerados pela aplicação passam todos pelo método:
HttpContext.Current.Response.ApplyAppPathModifier(caminho)
Estes dois passos garantem que a chave de sessão ASP.NET fica preservada no URL:
http://yourserver/folder/(session ID here)/default.aspx
Aqui fica um link util sobre este tema.
Nota Final:
@Thiago, se existirem cookies registados por dominio (i.e., usados em todos os tabs com páginas da mesma aplicação) e que sejam necessários para a autenticação do pedido, então apagar todos os cookies resultará igualmente num erro sempre que um tab seja submetido para o servidor.
Nuno Gomes http://nunogomes.net
- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08
-
Thiago,
Já tentou Session.Abandon() ? Você usar MasterPage ou alguma classe base? Pergunto isto porque se não resolver você pode verificar se a session não é nulla e com isto forçar alguma ação.
Paulo César Viana
.NET Developer
MCC - Microsoft Community Contributor
MCP - Microsoft Certified Professional
MCTS - Microsoft Certified Technology Especialist
--
Marque as respostas e contribua para uma melhora no fórum.- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08
-
Isso irá ocorrer mesmo, o jeito para solucionar isso seria evitar que o usuario abra sua aplicação em mais de uma aba (talvez executar em popUp)... Isso porque quando você abre mais de uma tab, elas compartilham a mesma session.
Quando tive esse problema, segui esse exemplo:
http://www.codeproject.com/Articles/35859/Detect-and-prevent-multiple-windows-or-tab-usage-i
- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08
-
Bom dia Thiago segue em exemplo ai.
Caso ainda tenha duvida pergunta ai.
if (((string)Session["usuario"]) == null)
{/*aqui vc se o usuario for nulo. por exemplo alguem digitou na URL sua pagina de cadastro ele ira verificar e se não ouver login ele manda para a pagina principal*/
Response.Redirect("Login.aspx", false);
}
else
{/*seus metodos.*/
}
para a session vc ultiliza Session.Abandon(); aqui ele ira abandonar a sessão caso o usuario queira sair do sistema.
- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08
-
Aqui um exemplo com o cookie
if (cookie == null)
{
myCookie.Value = txtRE.Text;
myCookie.Expires = DateTime.Now.AddDays(30d); /*aqui eu estou pedidno para inspirar o cookie de 30 dias*/
Response.Cookies.Add(myCookie);
myCookieSenha.Value = txtSenha.Text;
myCookieSenha.Expires = DateTime.Now.AddDays(30d); /*aqui eu estou pedidno para inspirar o cookie de 30 dias*/
Response.Cookies.Add(myCookieSenha);
}- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08
Todas as Respostas
-
Thiago,
Já tentou Session.Abandon() ? Você usar MasterPage ou alguma classe base? Pergunto isto porque se não resolver você pode verificar se a session não é nulla e com isto forçar alguma ação.
Paulo César Viana
.NET Developer
MCC - Microsoft Community Contributor
MCP - Microsoft Certified Professional
MCTS - Microsoft Certified Technology Especialist
--
Marque as respostas e contribua para uma melhora no fórum.- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08
-
Isso irá ocorrer mesmo, o jeito para solucionar isso seria evitar que o usuario abra sua aplicação em mais de uma aba (talvez executar em popUp)... Isso porque quando você abre mais de uma tab, elas compartilham a mesma session.
Quando tive esse problema, segui esse exemplo:
http://www.codeproject.com/Articles/35859/Detect-and-prevent-multiple-windows-or-tab-usage-i
- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08
-
"[...]Isso porque quando você abre mais de uma tab, elas compartilham a mesma session.[...]"
Boas Fabricio,
Isso que vocês escreveu está errado.
O que é partilhado entre os tabs do mesmo browser são as Cookies.
Porém ... se não tiver configurado o SessionState como Cookieless a chave de sessão será preservada entre posts num cookie o que provoca, quando os cookies são invalidados, o comportamento descrito pelo Thiago.
Para evitar este problema bastará seguir as seguintes indicações:
- configurar, web.config, o SessionState como cookieless:
<sessionState cookieless="UseUri" />
- garantir que os links gerados pela aplicação passam todos pelo método:
HttpContext.Current.Response.ApplyAppPathModifier(caminho)
Estes dois passos garantem que a chave de sessão ASP.NET fica preservada no URL:
http://yourserver/folder/(session ID here)/default.aspx
Aqui fica um link util sobre este tema.
Nota Final:
@Thiago, se existirem cookies registados por dominio (i.e., usados em todos os tabs com páginas da mesma aplicação) e que sejam necessários para a autenticação do pedido, então apagar todos os cookies resultará igualmente num erro sempre que um tab seja submetido para o servidor.
Nuno Gomes http://nunogomes.net
- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08
-
Bom dia Thiago segue em exemplo ai.
Caso ainda tenha duvida pergunta ai.
if (((string)Session["usuario"]) == null)
{/*aqui vc se o usuario for nulo. por exemplo alguem digitou na URL sua pagina de cadastro ele ira verificar e se não ouver login ele manda para a pagina principal*/
Response.Redirect("Login.aspx", false);
}
else
{/*seus metodos.*/
}
para a session vc ultiliza Session.Abandon(); aqui ele ira abandonar a sessão caso o usuario queira sair do sistema.
- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08
-
Aqui um exemplo com o cookie
if (cookie == null)
{
myCookie.Value = txtRE.Text;
myCookie.Expires = DateTime.Now.AddDays(30d); /*aqui eu estou pedidno para inspirar o cookie de 30 dias*/
Response.Cookies.Add(myCookie);
myCookieSenha.Value = txtSenha.Text;
myCookieSenha.Expires = DateTime.Now.AddDays(30d); /*aqui eu estou pedidno para inspirar o cookie de 30 dias*/
Response.Cookies.Add(myCookieSenha);
}- Marcado como Resposta Harley Araujo sexta-feira, 17 de fevereiro de 2012 10:08