2010-09-15 36 views
12

Estoy escribiendo un código de registro que se basa en SessionID ...SessionID sigue siendo el mismo después de Session.Abandon llamada

Sin embargo, al salir del navegador (llamando Session.Abandon), e ingrese nuevamente , SessionID sigue siendo el mismo. Básicamente, todos los navegadores de mi PC tienen su propia identificación de sesión "adjunta", y no cambiará por alguna razón:/

¿Alguna idea de lo que está pasando?

Mi configuración de sesión se parece a esto:

<sessionState 
     mode="InProc" 
     timeout="1" /> 

Gracias, Paweł

+0

¿Por qué querías eliminar la identificación de la sesión? Me ayudará mucho si responde mi pregunta aquí: http://stackoverflow.com/questions/37642982/why-not-to-reuse-asp-net-sessionid –

Respuesta

14

Comprobar este artículo que explica el proceso de Session.Abandon

http://support.microsoft.com/kb/899918

tomada desde arriba enlace -

"Cuando se abandona una sesión, la cookie de identificación de sesión no se elimina desde el navegador del usuario. Por lo tanto, tan pronto como se abandone la sesión, cualquier solicitud nueva a la misma aplicación usará la misma ID de sesión pero tendrá una nueva instancia de estado de sesión "

+11

Sí. Esto es lo que debe hacer en su código de cierre de sesión: Session.Abandon(); Response.Cookies.Add (new HttpCookie ("ASP.NET_SessionId", "")); Y en Web.config, haga esto: Augis

+0

¿Cuál es el beneficio de eliminar la cookie? Por favor, eche un vistazo a mi pregunta aquí: http://stackoverflow.com/questions/37642982/why-not-to-reuse-asp-net-sessionid –

5

Este es un comportamiento predeterminado por el diseño como se indica here:

identificadores de sesión para sesiones abandonadas o caducados son reciclado por defecto. Es decir, si se realiza una solicitud que incluye el identificador de sesión para una sesión vencida o abandonada, se inicia una nueva sesión utilizando el mismo identificador de sesión. Puede deshabilitar esto estableciendo el atributo regenerateExpiredSessionId del elemento de configuración sessionState en verdadero

Puede deshabilitar esta configuración como se menciona anteriormente.

EDIT: Establecer el atributo regenerateExpiredSessionId en true funciona solo para sesiones sin cookies. Para superar su problema, puede considerar implementar una clase personalizada que herede la clase SessionIDManager. Puede obtener información sobre eso here y here.

+0

Gracias. Howewer http://msdn.microsoft.com/en-us/library/h6bb9cz9%28v=VS.90%29.aspx afirma que el valor predeterminado regenerateExpiredSessionId se establece en verdadero. De todos modos, lo hice ahora, establecí regenerateExpiredSessionId = "true", y SessionID sigue siendo el mismo. – dragonfly

+0

sí, esto debería funcionar, pero la documentación indica que esto se aplica solo a las sesiones sin cookies. Ver comentarios en http://msdn.microsoft.com/en-us/library/system.web.configuration.sessionstatesection.regenerateexpiredsessionid.aspx – VinayC

+0

Oh cariño:/Entonces ... ¿hay alguna manera de regenerar SessionID usando NOT cookie- menos sesiones, estoy confundido. – dragonfly

0

Puede borrar explícitamente la cookie de sesión. Debe controlar el nombre de la cookie por configuration y usar el mismo nombre mientras borra.

Editar: Borrar la cookie de sesión cuando se abandona la sesión obligará a ASP.NET a crear una nueva sesión & sessionid para la próxima solicitud. Por cierto, otra forma de borrar la cookie de sesión es usar el método SessionIDManager.RemoveSessionID.

2

Esto es lo que funcionó para mí, la única advertencia es que este código debe separarse de su rutina de inicio de sesión.

Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddYears(-30) 

No tendrá efecto hasta que la página haya terminado de cargarse. En mi aplicación tengo una rutina simple de seguridad, que obliga a una nueva identificación, así:

if session("UserID") = "" then 
    Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddYears(-30) 
    Response.Redirect("login.aspx") 
end if 
+0

Funcionó como el pepino :) –

+0

Utilicé el siguiente código, HttpContext.Current.Response.Cookies ["ASP.NET_SessionId"]. Expira = DateTime.Now.AddYears (-30). Pero si tiene valores de sesión existentes, almacénelos en la memoria y realice la operación anterior o, de lo contrario, todos los valores en sesión se borrarán. También un punto importante a tener en cuenta es que, como dice shitburg, la nueva ID de sesión se genera al recargar solo. –

0

Ésta es una entrada antigua, pero si alguien todavía está buscando respuestas, aquí hay una completa y paso a paso solución sobre cómo lograr un cierre de sesión limpio con una nueva ID de sesión en todo momento.

Tenga en cuenta que este artículo se aplica únicamente a los sitios habilitados para cookies (sin cookies = falso).

Paso (1) Modificar el archivo web.config & complemento "regenerateExpiredSessionID" marcar como bajo -

<sessionState mode="InProc" cookieless="false" regenerateExpiredSessionId="true" /> 

Paso (2) Agregue el código siguiente en su evento de cierre de sesión -

Session.Clear(); 
Session.Abandon(); 
Response.Cookies.Add(New HttpCookie("ASP.NET_SessionId", "")); 
Response.redirect(to you login page); 

Paso (3) Agregue el siguiente código en el evento page_load de su página de inicio de sesión:

if(!IsPostBack) 
{ 
    Session.Clear(); 
    Session.Abandon(); 
} 

Los pasos 2 y 3 sirven para un propósito IMPORTANTE. Este código asegura que se genere una nueva ID de sesión después de hacer clic en el botón "Iniciar sesión". Esto evita la gestión de sesión débil (vulnerabilidad de fijación de sesión) que probablemente se detectará durante una prueba de penetración de terceros de su sitio.

Espero que esto ayude.

Cuestiones relacionadas