Você está aqui: ASP.NET ::: Dicas & Truques ::: Sessão

Destruindo uma sessão ASP.NET usando o método Abandon() da classe HttpSessionState (e gerando um novo SessionID)

Quantidade de visualizações: 9204 vezes
Uma sessão ASP.NET pode ser destruída usando o método Abandon() da classe HttpSessionState. Uma chamada a este método cancela a sessão atual, tornando-a inválida. Além disso, se você estiver usando os eventos Session_Start e Session_End no arquivo Global.asax, estes serão disparados após a chamada à Abandon(). Primeiro o evento Session_End é disparado e então o evento Session_Start dispara devido à criação de uma nova sessão na próxima requisição.

Vamos ver um exemplo? Coloque três botões <asp:Button>, uma caixa de texto <asp:TextBox> e um rótulo <asp:Label> em uma página. Quando digitarmos algum conteúdo na caixa de texto e clicarmos no primeiro botão, o valor será guardado na sessão. Ao clicarmos no segundo botão o valor guardado na sessão será obtido e exibido em um controle Label, juntamente com o SessionID. Finalmente, ao clicarmos no terceiro botão a sessão será destruída.

Veja o código completo para a página Default.aspx:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<%@ Page Language="C#" AutoEventWireup="true"  
CodeFile="Default.aspx.cs" Debug="true"
Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Estudos ASP.NET</title>
</head>
<body>

<form id="form1" runat="server">
  
  Valor a ser gravado no sessão:<br />
  <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
  
  <asp:Button ID="Button1" runat="server" Text="Gravar valor na sessão" 
    onclick="Button1_Click" /><br />
  
  <asp:Button ID="Button2" runat="server" Text="Obter valor na sessão" 
    onclick="Button2_Click" /><br />
  
  <asp:Label ID="Label1" runat="server" Text="Valor gravado na sessão">
  </asp:Label><br />
  
  <asp:Button ID="Button3" runat="server" Text="Destruir a sessão" 
    onclick="Button3_Click" /><br />
  
</form>

</body>
</html>


Veja agora a implementação do evento Click dos três botões no arquivo de code-behind Default.aspx.cs:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page {
  protected void Button1_Click(object sender, EventArgs e){
    // vamos gravar o conteúdo da caixa de texto na sessão
    // note que o nome do item é "nome"
    Session.Add("nome", TextBox1.Text);
    
    // vamos avisar que o item foi adicionado à sessão
    TextBox1.Text = "";
    Label1.Text = "O item e seu valor foram adicionados à sessão. " +
      "O SessionID é: " + Session.SessionID;
  }

  protected void Button2_Click(object sender, EventArgs e){
     // vamos recuperar o item "nome" na sessão
     if(Session["nome"] != null){
       Label1.Text = "Valor na sessão: " + Session["nome"] + ". " +
         "O SessionID é: " + Session.SessionID;
     }
     else{
       Label1.Text = "O item ainda não existe na sessão. " +
         "O SessionID é: " + Session.SessionID;
     }
  }

  protected void Button3_Click(object sender, EventArgs e){
    // vamos destruir a sessão
    Session.Abandon();
    Label1.Text = "A sessão foi abandonada (destruída). " +
      "O SessionID é: " + Session.SessionID;
  }
}

Execute a aplicação e veja os resultados. Note que, mesmo após a destruição da sessão, o valor do SessionID permanence o mesmo. Em algumas situações este comportamento pode ser indesejado. Assim, se quisermos que o ID da sessão seja destruído juntamente com ela, basta alterarmos o código do evento Click do terceiro botão para a seguinte versão:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

protected void Button3_Click(object sender, EventArgs e){
  // vamos destruir a sessão
  Session.Abandon();
  Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
  // vamos redirecionar para a página inicial...isso criará um novo
  // cookie com o SessionID
  Response.Redirect("http://localhost:8010/estudos_aspnet");
}

Teste a aplicação novamente e verá que após destruir a sessão atual, a nova sessão terá um SessionID completamente diferente do anterior.

Link para compartilhar na Internet ou com seus amigos:

Veja mais Dicas e truques de ASP.NET

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 32 usuários muito felizes estudando em nosso site.