Pergunta

Ambos Session.clear () e Session.Abandon () se livrar de variáveis ??de sessão. Pelo que entendi, Abandon () termina a sessão atual, e faz com que uma nova sessão a ser criado, assim, fazendo com que os eventos finais e começar a fogo.

Parece preferível chamar Abandon () na maioria dos casos, como login de um usuário para fora. Existem cenários em que eu usaria Clear () em vez disso? Existe muita diferença de desempenho?

Foi útil?

Solução

Session.Abandon() destrói a sessão e evento Session_OnEnd é acionado.

Session.Clear() apenas remove todos os valores (conteúdo) do objeto. A sessão com a mesma chave ainda está vivo.

Então, se você usar Session.Abandon(), você perde essa sessão específica e o usuário receberá uma nova chave de sessão. Você poderia usá-lo, por exemplo, quando o usuário fizer fora.

Use Session.Clear(), se você quiser que o usuário permanecer na mesma sessão (se você não quer que o usuário relogin por exemplo) e repor todos os dados da sessão específicos.

Outras dicas

Apenas usando Session.clear () quando um usuário fizer fora pode representar uma falha de segurança. Como a sessão ainda é válido na medida em que o servidor da Web está em causa. É então uma questão razoavelmente trivial para sniff, e agarrar a sessão Id, e sequestrar a sessão.

Por esta razão, ao fazer login de um usuário para fora seria mais seguro e mais sensato usar Session.Abandon () para que a sessão é destruída, e uma nova sessão criado (mesmo que a página de logout UI seria parte do nova sessão, a nova sessão não teria qualquer dos detalhes de usuários nele e sequestrando a nova sessão seria equivalente a ter uma nova sessão, portanto, seria mudo).

Eu ainda não estou certo do que um exemplo do mundo real é onde você usaria Session.Abondon(), Session.Clear().

Eu posso entender ... se o usuário clica em seu link de logout e você levá-los para o seu "você foi desconectado" página .... sua sessão do navegador ainda continua, mas você deseja remover a informação armazenada em a sessão. Se você abondoned a sessão, em seguida, uma nova sessão será criada imediatamente para o "você foi desconectado" página.

Session.Abandon destrói a sessão como dito acima assim que você deve usar este ao fazer logon alguém. Eu acho que um bom uso de Session.Clear seria para um carrinho de compras em um site de comércio eletrônico. Dessa forma, a cesta fica limpo sem sair do usuário.

Eu tive esse problema e tentou tanto, mas teve que se contentar com a remoção de porcaria como "pageEditState", mas não remover informações do usuário para que eu não tenha que procurá-lo novamente.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top