2008-12-05 25 views
53

Redirecciono al usuario a la página de inicio de sesión cuando el usuario hace clic en cerrar sesión, pero no creo que borre ninguna aplicación o sesión porque todos los datos persisten cuando el usuario inicia sesión nuevamente.Cómo borrar sesión al cerrar sesión

Actualmente la página de inicio de sesión tiene un control de inicio de sesión y el código detrás de la página solo está conectado al inicio de sesión Autenticar.

¿Puede alguien dirigirme a un buen tutorial o artículo sobre cómo manejar el inicio y cierre de sesión en los sitios web de ASP.NET?

Respuesta

66
+7

Intento Session.Abandon pero aún no se borra la sesión. – Jack

+0

Algo extraño está sucediendo, porque Session.Abandon() debería darle al usuario una nueva sesión. Tal vez tenga otro problema, si encuentra más/mejores datos: publíquelo y estoy seguro de que la comunidad intentará ayudarlo. –

18

yo preferiría Session.Abandon()

Session.Clear() no causará Fin al fuego y pide además desde el cliente no se iniciará el evento Session Start.

1
<script runat="server"> 
    protected void Page_Load(object sender, System.EventArgs e) { 
     Session["FavoriteSoftware"] = "Adobe ColdFusion"; 
     Label1.Text = "Session read...<br />"; 
     Label1.Text += "Favorite Software : " + Session["FavoriteSoftware"]; 
     Label1.Text += "<br />SessionID : " + Session.SessionID; 
     Label1.Text += "<br> Now clear the current session data."; 
     Session.Clear(); 
     Label1.Text += "<br /><br />SessionID : " + Session.SessionID; 
     Label1.Text += "<br />Favorite Software[after clear]: " + Session["FavoriteSoftware"]; 
    } 
</script> 



<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title>asp.net session Clear example: how to clear the current session data (remove all the session items)</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <h2 style="color:Teal">asp.net session example: Session Clear</h2> 
     <asp:Label 
      ID="Label1" 
      runat="server" 
      Font-Size="Large" 
      ForeColor="DarkMagenta" 
      > 
     </asp:Label> 
    </div> 
    </form> 
</body> 
</html> 
10

Session.Abandon() destruye la sesión y el evento se dispara Session_OnEnd.

Session.Clear() simplemente elimina todos los valores (contenido) del Objeto. El session with the same key sigue siendo alive.

Por lo tanto, si usa Session.Abandon(), pierde esa sesión específica y el usuario obtendrá un new session key. Puede usarlo, por ejemplo, cuando el usuario logs out.

Use Session.Clear(), si desea que el usuario permanezca en la misma sesión (si no desea que vuelva a iniciar sesión, por ejemplo) y restablezca todos los datos específicos de su sesión.

+0

Creo que esta es la mejor respuesta hasta ahora. – Renan

18

utilizo siguiente para borrar la sesión y claro aspnet_sessionID:

HttpContext.Current.Session.Clear(); 
HttpContext.Current.Session.Abandon(); 
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); 
+2

+1 para esto: Muy buena respuesta, es la única manera limpia de hacerlo. Sin configurar ASP.NET_SessionId como cadena vacía, la ID de la sesión anterior se seguiría utilizando (lo que se puede verificar con la barra de herramientas del desarrollador F12, Red, Detalles). Lo he intentado antes con solo '.Clear' y' .Abandon', pero este 3º paso es realmente necesario. – Matt

2

vaya a Archivo Global.asax.cs en su proyecto y agregue el código siguiente.

protected void Application_BeginRequest() 
    { 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetExpires(DateTime.Now.AddHours(-1)); 
     Response.Cache.SetNoStore(); 
    } 

¡Funcionó para mí ..! Enlace de referencia Clear session on Logout MVC 4

+2

Solo para aclarar, tenga en cuenta que este código NO borra ningún dato de la sesión; solo desalienta al navegador web del usuario de los datos del caché y podría tener implicaciones para el rendimiento si se aplica descuidadamente. –

0

La forma de borrar la sesión es un poco diferente para .NET core. No hay función Abandon().

ASP.NET Core 1.0 o posterior

//Removes all entries from the current session, if any. The session cookie is not removed. 
HttpContext.Session.Clear() 

See api Reference here

.NET Framework 4.5 o posterior

//Removes all keys and values from the session-state collection. 
HttpContext.Current.Session.Clear(); 

//Cancels the current session. 
HttpContext.Current.Session.Abandon(); 

See api Reference here

Cuestiones relacionadas