Cómo y por qué se reutilizan identificadores de sesión en ASP.NET

Seleccione idioma Seleccione idioma
Id. de artículo: 899918 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

INTRODUCCIÓN

En este artículo describe cómo y por qué se utilizan identificadores de sesión de Microsoft ASP.NET.

Más información

El estado de sesión de ASP.NET es una tecnología que permite almacenar datos específicos del usuario del lado del servidor. Las aplicaciones Web pueden utilizar estos datos para procesar las solicitudes del usuario para el que se crearon instancias el estado de sesión. Un usuario de estado de sesión se identifica mediante un identificador de sesión. El identificador de sesión se entrega mediante uno de los métodos siguientes:
  • El identificador de sesión es parte de una cookie que se envía al explorador del usuario.
  • El identificador de sesión se incrusta en la dirección URL. Esta técnica es también conocida como una sesión sin cookies .
Los identificadores de sesión son un número aleatorio 120 bits representado por una cadena de 20 caracteres. Formato de la cadena para que se pueden incluir en una dirección URL y no es necesario que experimentar la codificación URL. Por ejemplo, la cadena puede utilizarse en sesiones sin cookies. El método más utilizado de proporcionar identificadores de sesión es mediante cookies para almacenar los identificadores de sesión.

Cuando un usuario abre por primera vez su explorador Web y, a continuación, va a un sitio Web que implementa el estado de sesión de ASP.NET, una cookie se envía al explorador con el nombre "ASP.NET_SessionId" y un valor de 20 caracteres.

Cuando el usuario explora dentro del mismo dominio DNS, el explorador Web continúa enviando este cookie en el dominio para el que se ha originado.

Por ejemplo, app1.tailspintoys.com y app2.tailspintoys.com son ambas aplicaciones ASP.NET. Si el usuario va a app1.tailspintoys.com y, a continuación, va a app2.tailspintoys.com, ambas aplicaciones utilizaría la misma cookie y el mismo identificador de sesión de seguimiento del estado de sesión del usuario dentro de cada aplicación. Las aplicaciones no comparten el mismo estado de sesión. Las aplicaciones sólo comparten el identificador de sesión.

Por lo tanto, se pueden reutilizar identificadores de sesión por varias razones. Por ejemplo, si reutilizar identificadores de sesión, no es necesario hacer lo siguiente:
  • Crear un nuevo identificador de sesión criptográficamente único cuando se presentan con una identificador de sesión válido.
  • Cree un identificador nueva sesión para cada aplicación de ASP.NET está en un único dominio.
Cuando la aplicación Web requiere un inicio de sesión y ofrece un registro fuera de la página o de opción, recomendamos que desactive el estado de sesión cuando el usuario ha iniciado la sesión fuera del sitio Web. Para borrar el estado de sesión, llame al método Session.Abandon . El método Session.Abandon permite vaciar el estado de sesión sin esperar el tiempo de espera de estado de sesión. De forma predeterminada, este tiempo de espera es un vencimiento variable 20 minutos. Este vencimiento se actualiza cada vez que el usuario realiza una solicitud al sitio Web y presenta la cookie del identificador de sesión. El método Abandon establece un indicador en el objeto de estado de sesión que indica que debe ser abandona el estado de sesión. El indicador se examinan y actuó al final de la solicitud de página. Por lo tanto, el usuario puede utilizar objetos de sesión dentro de la página después de llamar al método Abandon . En cuanto se haya completado el procesamiento de página, se quita la sesión.

Cuando utilizar el modo de estado de sesión en proceso, estos objetos de estado de sesión se almacenan en el HttpCache. El HttpCache admite un método de devolución de llamada cuando se cumplen las condiciones siguientes:
  • Se quita una entrada de caché.
  • El Administrador de estado de sesión se registra el controlador del evento Session_OnEnd para se llama cuando se quita la entrada de caché.
Cuando el Administrador de estado de sesión, se quita un objeto de estado de sesión que reside en la caché, el Administrador de HttpCache llamará a las devoluciones de llamada registradas. En efecto, este comportamiento provoca el controlador del evento Session_OnEnd .

Al abandonar una sesión, la cookie del identificador de sesión no se quitará el explorador del usuario. Por lo tanto, tan pronto como se ha abandonado la sesión, cualquier solicitud nuevo a la misma aplicación utilizará el mismo identificador de sesión pero tendrá una instancia de estado de sesión nuevo. Al mismo tiempo, si el usuario abre otra aplicación en el DNS mismo dominio, el usuario no perderá su estado de sesión después de llamar el método Abandon de una aplicación.

A veces, quizás no desee reutilizar el identificador de sesión. Si realice y si entiende las consecuencias de no volver a utilizar el identificador de sesión, utilice en el ejemplo de código siguiente se para abandonar una sesión y borrar la cookie del identificador de sesión:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
este ejemplo de código borra el estado de sesión desde el servidor y establece la cookie de estado de sesión a null. El valor null eficazmente borra la cookie desde el explorador.

Cuando un usuario no registra de la aplicación y se produce tiempo de espera de estado de la sesión, la aplicación puede seguir utilizando la misma cookie de estado de sesión si el explorador no está cerrado. Este comportamiento hace que el usuario se envíen a la página de inicio de sesión y la cookie de estado de sesión del usuario que se presenten. Para garantizar que se utiliza un identificador de sesión nuevo cuando abra la página de inicio de sesión (login.aspx), enviar una cookie null volver al cliente. Para ello, agregue una cookie a la colección de respuesta. A continuación, devolver la colección de respuesta del cliente. La forma más sencilla de enviar una cookie null está usando el método Response.Redirect . Porque la colección de cookies siempre tiene un valor para el ASP.NET_SessionId, simplemente no puede probar si esta cookie existe porque creará un bucle Response.Redirect . Puede establecer una cadena de consulta en la redirección a la página de inicio de sesión.

O, tal como se muestra en el ejemplo de código siguiente, puede utilizar una cookie distinta para indicar si ya se redirigen a la página de inicio de sesión. Para mejorar la seguridad y asegúrese de que nadie intenta abrir la página de inicio de sesión mediante una segunda cookie junto con la cookie ASP.NET, en el ejemplo de código siguiente se utiliza la clase FormsAuthentication para cifrar y descifrar los datos de cookies. A continuación, el ejemplo de código establece un tiempo de espera 5 segundos.
private void Page_Load(object sender, System.EventArgs e)
{ 
if( !IsPostBack && 
( Request.Cookies["__LOGINCOOKIE__"] == null ||
Request.Cookies["__LOGINCOOKIE__"].Value == "" ) )
{
//At this point, we do not know if the session ID that we have is a new
//session ID or if the session ID was passed by the client. 
//Update the session ID.

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

//To make sure that the client clears the session ID cookie, respond to the client to tell 
//it that we have responded. To do this, set another cookie.
AddRedirCookie();
Response.Redirect( Request.Path );
}

//Make sure that someone is not trying to spoof.
try
{
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt( Request.Cookies["__LOGINCOOKIE__"].Value );

if( ticket == null || ticket.Expired == true ) 
throw new Exception();

RemoveRedirCookie();
}
catch
{
//If someone is trying to spoof, do it again.
AddRedirCookie();
Response.Redirect( Request.Path );
}


Response.Write("Session.SessionID="+Session.SessionID+"<br/>");
Response.Write("Cookie ASP.NET_SessionId="+Request.Cookies["ASP.NET_SessionId"].Value+"<br/>");
} 

private void RemoveRedirCookie() 
{ 
Response.Cookies.Add(new HttpCookie("__LOGINCOOKIE__", "")); 
} 

private void AddRedirCookie()
{

FormsAuthenticationTicket ticket = 
new FormsAuthenticationTicket(1,"Test",DateTime.Now,DateTime.Now.AddSeconds(5), false,""); 
string encryptedText = FormsAuthentication.Encrypt( ticket ); 
Response.Cookies.Add( new HttpCookie( "__LOGINCOOKIE__", encryptedText ) );
}

Propiedades

Id. de artículo: 899918 - Última revisión: viernes, 8 de septiembre de 2006 - Versión: 1.3
La información de este artículo se refiere a:
  • Microsoft .NET Framework 1.1
Palabras clave: 
kbmt kbinfo kbhowto KB899918 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 899918

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com