2011-03-16 53 views
23

¿Cómo puedo destruir una sesión (Session ["Name"]) cuando el usuario hace clic en el botón de cerrar sesión?Cómo matar una sesión o ID de sesión (ASP.NET/C#)

Estoy mirando a través de la Referencia de API de ASP.NET en MSDN y no parece tener mucha información. Parece bastante limitado. Pero no puedo encontrar ninguna otra página para ASP.NET Clases etc.

que he intentado:

Session.Abandon(); y Session.Contents.Remove("Name"); ninguno de ellos trabajan. (He encontrado esto en un foro de una búsqueda en Google)

+0

¿Qué quiere decir por "ninguno de ellos trabajan" Um ... – Bob

+0

Cuando la salida del contenido de la sesión [ "Nombre"] que todavía emite el nombre, pero no debería, ya que debería' ha sido limpiado o asesinado Y no me cierra la sesión. Entonces, eso es lo que quiero decir con "ninguno de ellos funciona" –

+0

Intenta agregar una redirección a la página de inicio de sesión, busca la sesión ["Nombre"] allí. – Bob

Respuesta

53

El método Abandon debería funcionar (MSDN):

Session.Abandon(); 

Si desea eliminar un elemento específico del uso de sesiones (MSDN):

Session.Remove("YourItem"); 

EDIT: Si lo que desea es borrar un valor que puede hacer:

Session["YourItem"] = null; 

Si desea borrar todas las claves de do:

Session.Clear(); 

Si ninguno de estos están trabajando para usted, entonces algo raro está pasando. Revisaría para ver dónde está asignando el valor y verificará que no se reasigne después de borrar el valor.

comprobación simple de hacer:

Session["YourKey"] = "Test"; // creates the key 
Session.Remove("YourKey"); // removes the key 
bool gone = (Session["YourKey"] == null); // tests that the remove worked 
+1

Gracias, @Kelsey; Acabo de actualizar mi pregunta para mostrar lo que ya he intentado. El Método Abaondon no funciona: S –

+0

@Lucifer ¿Estás tratando de matar a la 'Sesión' de la sesión actual o estás tratando de hacerlo desde el nivel de la aplicación y localizar y matar una sesión específica? – Kelsey

+0

Um, de la sesión actual ,? –

1

Session.Abandon() esto destruirá los datos.

Nota, esto no necesariamente eliminará realmente el token de sesión de un usuario, y ese mismo token de sesión en un momento posterior podría ser recogido y creado como una nueva sesión con el mismo ID porque se considera juego limpio para ser utilizado.

+0

Gracias @Chris, lo he intentado, y aún muestra el contenido de la sesión ["Nombre"] y no cerrará sesión. –

5

Session.Abandon()

Esto marca la sesión como abandonado, pero la sesión no será realmente abandonado en ese momento, la petición tiene que completar primero.

1

matas a una sesión de la siguiente manera:

Session.Abandon() 

Sin embargo, si lo que desea es vaciar la sesión, utilice:

Session.Clear() 
+0

Si solo intenta eliminar el 'Nombre', puede hacer 'Session.Remove (" Name ");' o borrarlo usando 'Session [" Name "] = null;' –

+1

Ninguno de estos está funcionando. He intentado Session.Abandon(); Session.Contents.Remove ("Nombre"); Session.Contents.RemoveAll(); Session.Clear(); Session ["Name"] = null (que es originalmente lo que hice) - y ninguno de ellos funciona. –

1
Session.Abandon() 

es lo que debe utilizar. la cosa está detrás de las escenas. asp.net destruirá la sesión, pero inmediatamente le dará al usuario una nueva sesión en la próxima página. Entonces, si está revisando para ver si la sesión desaparece justo después de llamar a abandonar, parecerá que no funcionó.

+0

Consulte la sección Observaciones en el documento de MSDN para Session.Abandon -> http://msdn.microsoft.com/en-us/library/ms524310.aspx –

+0

Gracias @AlanB - Entonces, ¿cómo puedo cerrar sesión de mi ' cuenta 'inmediatamente después de hacer clic en el botón de Cerrar sesión ?, si la sesión no se eliminará? –

+0

Supongo que depende un poco del código que está haciendo, pero la operación básica sería si tiene el botón "Cerrar sesión" en una página que en el código hace una llamada a session.abandon() y luego lo redirige a su página de inicio. la carga de la página de inicio debe tener una nueva sesión y, por lo tanto, ya no debe "iniciar sesión". Tendrán una nueva sesión pero todos los datos asociados con la sesión anterior se han ido. –

3

Por lo que he probado:

Session.Abandon(); // Does nothing 
Session.Clear(); // Removes the data contained in the session 

Example: 
001: Session["test"] = "test"; 
002: Session.Abandon(); 
003: Print(Session["test"]); // Outputs: "test" 

Session.Abandon qué sólo se establece un indicador booleano en la sesión a objetos en true.El servidor web que llama puede reaccionar a eso o no, pero hay NO acción inmediata causada por ASP. (lo comprobé con el .net-Reflector)

De hecho, puede continuar trabajando con la sesión anterior, presionando el botón Atrás del navegador una vez, y continuar navegando por el sitio web normalmente.

Por lo tanto, para concluir esto: Use Session.Clear() y guarde la frustración.

Observación: He probado este comportamiento en el servidor de desarrollo ASP.net. El IIS real puede comportarse de manera diferente.

1
Session["YourItem"] = ""; 

Funciona muy bien en .net razor páginas web.

+2

Si bien esta muestra de código posiblemente pueda responder la pregunta, sería preferible incluir alguna explicación esencial a su respuesta. Tal como está ahora, esta respuesta agrega poco o ningún valor para los lectores futuros. –

1

Session.Abandon(); tampoco funcionó para mí.

La manera en que tuve que escribirla para que funcionara fue así. Podría funcionar para usted también.

HttpContext.Current.Session.Abandon(); 
4

También es una buena idea indicar al navegador del cliente que borre el valor de la cookie del id de sesión.

Session.Clear(); 
Session.Abandon(); 
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty; 
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10); 
+0

esto funcionó para mí. Muchas gracias :) – GeekExplorer

Cuestiones relacionadas