2012-10-12 55 views
7

Soy un nuevo desarrollador, y me han asignado la tarea de averiguar por qué nuestra función de cierre de sesión no funciona. Probé todos los métodos posibles que puedo encontrar. A continuación se muestra el registro que he mantenido que incluye los métodos que he usado.Borrando una sesión en ASP.NET

  1. añadido un botón de cierre de sesión a la forma CommonHeader.ascx

  2. han intentado numerosos métodos en la forma logout.aspx.vb conseguirlo para finalizar o borrar la sesión, pero ninguno de ellos trabajar.

a. Supresión de ClearSession definida en el formulario logout.aspx.vb:

Session("Variable") = "" 
FormsAuthentication.SignOut() 
Session.RemoveAll() 
Session.Abandon() 
Session.Clear() 

b. También se agregó esto a la parte superior de la subcomputadora Page_Load:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache) 
HttpContext.Current.Response.Cache.SetNoServerCaching() 
HttpContext.Current.Response.Cache.SetNoStore() 

c. También cambió la rutina secundaria de ClearSession a Session.Contents.Remove("Variable") desde Session("Variable") = ""

Ninguno de estos métodos funciona. Usamos Siteminder, y me he estado preguntando si esta es la raíz del problema. Simplemente no puedo encontrar nada al borrar una sesión que usa Siteminder. También hay que tener en cuenta esta solicitud se codifica con Visual Studio 2003.

Este es el código para el botón que estoy usando en el ascx:

aTHP: TopNavText Título = "Cerrar sesión" NavigateUrl = "cierre de sesión .aspx "Target =" _ top "/

Luego, en el formulario" logout.aspx ", he intentado simplemente usar uno de los métodos descritos anteriormente o una combinación de cada uno. Este es el código antes de que yo toco:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    ClearSession() 
    Response.Redirect("login.aspx") 

End Sub 

Public Sub ClearSession() 

    Session("Variable") = "" 

End Sub 
+0

¿Confirmó al depurar que se estaba llamando a su rutina de sub de ClearSession? (particularmente cuando tenía Session.Abandon() allí) –

+0

Si usa VS2003, entonces está usando .NET 1.1. –

+0

Sí, definitivamente llega a la rutina secundaria. Puse marcadores en el código para verificar que no se detuviera antes de que llegara a la subrutina de ClearSession. Se llama cuando se carga la página, luego se supone que debe redirigir a la página de inicio de sesión, pero me redirige a la página de inicio cuando todavía tengo una sesión iniciada cuando tengo Response.Redirect ("login.aspx") sin comillas. – gbills

Respuesta

2

Finalmente descubrí la solución, originalmente no definí el dominio al eliminar la cookie que contenía la id de la sesión de Siteminder. El código que utilicé es el siguiente:

 Dim cookie3 As HttpCookie = New HttpCookie("SMSESSION", "NO") 
     cookie3.Expires = DateTime.Now.AddYears(-1) 
     cookie3.Domain = ".domain.com" 
     Response.Cookies.Add(cookie3) 

     Response.Redirect("login.aspx") 
0

esta pregunta: ¿formsauthentication-signout-does-not-log-the-user-out describe un problema de no borrar las cookies incluso después de llamar FormsAuthentication.SignOut(). Esto suena como su problema, dicen que es un error con .NET y como su uso 1.1 esto suena claramente posible.

+0

usando ese ejemplo me da este error: Mensaje de error del compilador: BC30108: 'HttpCookie' es un tipo y no se puede usar como expresión. Línea 36: HttpCookie cookie1 = new HttpCookie (FormsAuthentication.FormsCookieName, "") – gbills

+0

Ok, corregí ese error del compilador, pero todavía no funciona con ese ejemplo. – gbills

0

HI amigo, por favor agregue el evento de clic del botón en el control del usuario. Y en el evento click, agregue el siguiente código y elimine todo el otro código.

Session ("Variable") = "";

+0

@denas Publiqué el código anterior en mi pregunta – gbills

0

vistazo a este post

C# Clear Session

Ya se trate de do sostenido o VB las mismas reglas todavía se aplican. Estás llamando al abandono de la sesión y luego está claro, pero para el momento en que llames, la sesión se habrá borrado de todos modos.

Clear mantiene el estado de la sesión junto con los objetos que contiene, por lo que al llamarlo después de abandonarlo podría reiniciar una sesión para el usuario, pero con variables eliminadas.

Ver este post para el orden y la forma correcta de matar a la sesión y redirigir a la página de inicio de sesión si usted tiene uno

FormsAuthentication.SignOut() does not log the user out

0

Lo primero a destacar es que, si estás usando las Formas Autenticación: la sesión no tiene absolutamente nada que ver con si un usuario inicia sesión o no.

Si llama al FormsAuthentication.SignOut, se eliminará la información del ticket de autenticación de formularios de la cookie o la URL si CookiesSupported es falso.

Pero no tendrá ningún efecto sobre lo que se almacena en la sesión.

ACTUALIZACIÓN

¿Por qué piensa cerrar la sesión (FormsAuthentication.SignOut) no está funcionando? ¿Qué espera que suceda cuando hace clic en Cerrar sesión y qué está sucediendo exactamente?

Me desharía de todo el código para borrar la sesión y mirar esto. Por ejemplo, observe el tráfico http con una herramienta como Fiddler: debería poder ver que la cookie FormsAUthentication se elimina cuando hace clic en Cerrar sesión.

+0

Gracias por aclarar eso. Solo pensé en probarlo porque en este momento solo quiero que funcione. Estamos utilizando el espacio de nombres System.Web.SessionState, que supongo que podría utilizar algunos de los métodos que he probado anteriormente. – gbills

+0

Cuando hago clic en Cerrar sesión, intento que me lo redireccione a mi página de inicio de sesión. En cambio, simplemente me redirige a mi página principal. Probé cada uno de los métodos que mencioné anteriormente, y para cada uno de acuerdo con Fiddler es la misma cookie que se sigue utilizando. Creo que tiene algo que ver con Siteminder, pero no sé cómo matar una sesión de Siteminder – gbills

+0

@GarrettBills, casi seguro está relacionado con SiteMinder. No estoy familiarizado con SiteMinder, así que agregué una etiqueta de SiteMinder a su pregunta con la esperanza de que alguien que la vea lo vea.Asumiría que necesitaría caducar cualquier cookie que use SiteMinder (normalmente estableciendo su fecha de caducidad en una fecha anterior): debería poder ver la cookie usando Fiddler. – Joe

Cuestiones relacionadas