Exportar (0) Imprimir
Expandir todo

Información general acerca del estado de sesión

El estado de sesión de ASP.NET permite almacenar y recuperar los valores de un usuario cuando el usuario explora diferentes páginas ASP.NET que conforman una aplicación Web. HTTP es un protocolo sin estado, lo que significa que el servidor Web trata cada solicitud HTTP de una página como una solicitud independiente; el servidor no retiene información alguna sobre los valores de las variables que se utilizan durante las solicitudes anteriores. El estado de sesión de ASP.NET identifica las solicitudes recibidas desde el mismo explorador durante un período limitado de tiempo como una sesión y proporciona la capacidad de conservar los valores de las variables durante la duración de esa sesión.

El estado de sesión de ASP.NET se habilita de forma predeterminada en todas las aplicaciones ASP.NET.

Otras alternativas al estado de sesión son el estado de la aplicación (vea la propiedad Application), que almacena variables a las que todos los usuarios de una aplicación ASP.NET pueden tener acceso; el espacio de nombres System.Web.Profile, que mantiene los valores de usuario en un almacén de datos sin que caduquen pasado un período de espera; el espacio de nombres System.Web.Caching, que almacena los valores de uso frecuente en una memoria que está disponible a todas las aplicaciones ASP.NET; el espacio de nombres System.Web.UI.WebControls de ASP.NET, que mantiene los valores del control en la propiedad ViewState; el objeto Cookies; el objeto QueryString, y los campos de un formulario HTML que están disponibles en un comando HTTP POST que utiliza la colección Form. Vea Recomendaciones de administración de estado de ASP.NET para obtener una comparación de las diferentes opciones de administración de estados.

Variables de sesión

Las variables de sesión se almacenan en la clase SessionStateItemCollection que está disponible a través de la propiedad System.Web.HttpContext.Session. La colección de las variables de sesión está indizada por el nombre de la variable o por un índice de enteros. Las variables de sesión se crean sencillamente estableciendo referencias a la variable de sesión por el nombre. No necesita declarar una variable de sesión ni agregarla explícitamente a la colección. Por ejemplo, en el ejemplo de código siguiente se crean variables de sesión para el nombre y el apellido de un usuario y se establecen en valores recuperados de los controles TextBox.

Session["FirstName"] = FirstNameTextBox.Text;
Session["LastName"] = LastNameTextBox.Text;

De forma predeterminada, las variables de sesión pueden ser cualquier tipo .NET válido. Por ejemplo, en el ejemplo de código siguiente se almacena una clase ArrayList de valores en una variable de sesión denominada "StockPicks". Tenga en cuenta que el valor devuelto por la variable de sesión "StockPicks" debe transformarse en el tipo apropiado tras la recuperación de SessionStateItemCollection.

NoteNota

Cuando utiliza un modo de estado de sesión distinto de InProc, el tipo de la variable de sesión tipo debe ser un tipo .NET primitivo o serializable, porque el valor de la variable de sesión se almacena en un almacén de datos externo. Para obtener más información, vea Modos de estado de sesión.

// When retrieving an object from session state, cast it as 
// the appropriate type.
ArrayList stockPicks = (ArrayList)Session["StockPicks"];

// Write the modified stock picks list back to session state.
Session["StockPicks"] = stockPicks;

Identificadores de sesión

Las sesiones se identifican mediante un identificador de sesión exclusivo que se puede leer utilizando la propiedad SessionID. Cuando el estado de sesión se habilita en una aplicación ASP.NET, cada solicitud de una página de la aplicación se examina en busca de un valor SessionID enviado desde el explorador. Si no se proporciona ningún valor SessionID, ASP.NET inicia una nueva sesión y el valor SessionID de esa sesión se envía al explorador con la respuesta.

De forma predeterminada, los valores SessionID se almacenan en una cookie, pero también puede configurar la aplicación para que los valores SessionID se almacenen en la dirección URL de una sesión "sin cookies." Para obtener más información, vea Identificadores de sesión.

Una sesión se considera activa siempre que las solicitudes continúen llevándose a cabo con el mismo valor SessionID. Si el tiempo entre las solicitudes de una determinada sesión excede el valor de tiempo de espera especificado en minutos, la sesión se considera caducada. Si se realizan solicitudes con un valor SessionID caducado, se inicia una nueva sesión.

Eventos de sesión

ASP.NET proporciona dos eventos que ayudan a administrar las sesiones de usuario: el evento Session_OnStart, que se desencadena cuando comienza una nueva sesión, y el evento Session_OnEnd, que se desencadena cuando se abandona una sesión o ésta caduca. Los eventos de sesión se especifican en el archivo Global.asax de una aplicación ASP.NET. Tenga en cuenta que no se admite el evento Session_OnEnd si la propiedad Mode de la sesión se establece en un valor distinto de InProc, que es el modo predeterminado.

NoteNota

Si se modifica el archivo Global.asax o el archivo Web.config de una aplicación ASP.NET, se reiniciará la aplicación y se perderá cualquier valor almacenado en el estado de la aplicación o en el estado de sesión. Tenga en cuenta que algunos programas antivirus pueden actualizar la fecha y la hora de la última modificación del archivo Global.asax o Web.config de una aplicación.

Para obtener más información, vea Eventos de estado de sesión.

Modos de sesión

El estado de sesión de ASP.NET es compatible con distintas opciones de almacenamiento de las variables de sesión. Cada opción se identifica como un valor Mode del estado de sesión. El comportamiento predeterminado consiste en almacenar las variables de sesión en el espacio de memoria del proceso de trabajo de ASP.NET. Sin embargo, también puede especificar que el estado de sesión se almacene en un proceso diferente, en una base de datos de SQL Server o en un origen de datos personalizado. Si no desea que el estado de sesión esté habilitado en su aplicación, puede establecer el modo de sesión en Off.

Para obtener más información, vea Modos de estado de sesión.

Configurar el estado de sesión

El estado de sesión se configura utilizando el elemento sessionState de la sección de configuración system.web. También puede configurar el estado de sesión mediante la directiva de página EnableSessionState.

El elemento sessionState permite especificar el modo en el que la sesión almacenará los datos, la manera en que los valores de identificación de sesión se envían entre el cliente y el servidor, el valor Timeout de la sesión y los valores que se admiten en función del valor de sesión Mode. Por ejemplo, el elemento sessionState siguiente configura una aplicación en el modo de sesión SQLServer , con un valor Timeout de 30 minutos, y especifica que los identificadores de sesión se almacenen en la dirección URL.

<sessionState mode="SQLServer"
  cookieless="true "
  regenerateExpiredSessionId="true "
  timeout="30"
  sqlConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
  stateNetworkTimeout="30"/>

Puede deshabilitar el estado de sesión en una aplicación estableciendo el modo de estado de sesión en Off. Si desea deshabilitar el estado de sesión solamente en una determinada página de una aplicación, puede establecer la directiva de página EnableSessionState en false. Tenga en cuenta que la directiva de página EnableSessionState también se puede establecer en ReadOnly para proporcionar acceso de sólo lectura a las variables de sesión.

Solicitudes simultáneas y estado de sesión

El acceso al estado de sesión de ASP.NET es exclusivo para cada sesión, lo que significa que si dos usuarios diferentes realizan solicitudes simultáneas, se concederá simultáneamente acceso a dos sesiones diferentes. Sin embargo, si se realizan dos solicitudes simultáneas para la misma sesión (es decir, utilizando el mismo valor SessionID ), la primera solicitud recibida tendrá acceso exclusivo a la información de la sesión, mientras que la segunda solicitud se ejecutará cuando finalice la primera sesión o hasta que el bloqueo exclusivo de la información se libere porque la primera solicitud ha excedido el tiempo de espera del bloqueo. Si la directiva de página EnableSessionState se establece en ReadOnly, una solicitud de sólo lectura de la información de sesión no produce un bloqueo exclusivo de los datos de la sesión. Es posible que las solicitudes de sólo lectura aún tengan que esperar a que se libere el bloqueo existente en una solicitud de lectura y escritura para los datos de la sesión.

Vea también

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft