Buscar..


Sintaxis

  • Session ["Session_Key"] = Obj_Value;

Observaciones

HTTP es sin estado. El estado de la sesión ASP.NET es un marco que facilita el mantenimiento del estado entre las solicitudes de página HTTP.

La sesión difiere de las variables de nivel de clase en su capacidad de permanecer disponible a través de post-backs y diferentes páginas. Por ejemplo, una variable de sesión creada en Page1.aspx estará disponible si el usuario se redirige a Page2.aspx posteriormente, dentro de la misma aplicación.

Además, a diferencia de las variables estáticas declaradas a nivel de página, las variables de sesión son independientes para diferentes usuarios. Es decir, cambiar el valor de la variable de sesión de un usuario no afectará el valor de la misma variable para otros usuarios.

Si bien ViewState se puede usar para almacenar los datos del usuario temporalmente, no permite guardar datos en varias páginas. Además, el estado de viewstate es parte de la página y se envía al cliente. Como resultado, cualquier información crítica relacionada con el usuario no se puede guardar en ViewState , y ahí es donde las variables de la sesión se vuelven útiles.

Usando el objeto Session para almacenar valores

El objeto System.Web.SessionState.HttpSessionState proporciona una forma de conservar los valores entre las solicitudes HTTP. En el siguiente ejemplo, la preferencia de un usuario por las advertencias se guarda en la sesión. Más adelante, mientras se entrega otra solicitud al usuario, la aplicación puede leer esta preferencia de la sesión y ocultar las advertencias.

public partial class Default : System.Web.UI.Page
{
    public void LoadPreferences(object sender, EventArgs args)
    {
        // ... 
        // ... A DB operation that loads the user's preferences.
        // ...

        // Store a value with the key showWarnings
        HttpContext.Current.Session["showWarnings"] = false;
    }

    public void button2Clicked(object sender, EventArgs args)
    {
        // While processing another request, access this value.
        bool showWarnings = (bool)HttpContext.Current.Session["showWarnings"];
        lblWarnings.Visible = false;
    }
}    

Tenga en cuenta que las variables de sesión no son comunes para todos los usuarios (al igual que las cookies), y se conservan en varias respuestas posteriores.

La sesión funciona configurando una cookie que contiene un identificador para la sesión de los usuarios. De forma predeterminada, este identificador se almacena en la memoria del servidor web, junto con los valores almacenados en su contra.

Aquí hay una captura de pantalla del conjunto de cookies en el navegador del usuario para realizar un seguimiento de la sesión:

sessionStateCookie

Usando un almacén de sesión SQL

Si descubre que tiene varios servidores que necesitan compartir el estado de la sesión, almacenarlo en la memoria de proceso de ASP.NET no funcionará. Por ejemplo, puede implementarse en un entorno de granja de servidores web con un equilibrador de carga que distribuye solicitudes de forma rotatoria. En este entorno, las solicitudes de un solo usuario pueden ser atendidas por múltiples servidores.

En el archivo web.config puede configurar un almacén de sesión del servidor SQL.

<configuration>
  <system.web>
    <sessionState 
      mode="SQLServer"
      sqlConnectionString="Data Source=localhost;Integrated Security=SSPI"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

Para crear el esquema sql use la herramienta aspnet_regsql. [SampleSqlServerName] es el nombre de host del servidor SQL. -ssadd le dice a la herramienta que cree la base de datos de estado de sesión. -sstype p le dice a la herramienta que cree una nueva base de datos con el nombre predeterminado ASPState.

aspnet_regsql.exe -S [SampleSqlServerName] -U [Username] -P [Password] -ssadd -sstype p

Usando un almacén de sesión de Amazon DynamoDB

Si no desea utilizar el servidor SQL, puede usar la base de datos nosql de Dynamo DB alojada de Amazon como almacén de sesiones.

Necesitarás el SDK de AWS. Para instalar esto desde la consola del administrador de paquetes nuget de Visual Studio, use el siguiente comando

Install-Package AWSSDK 

Luego puede configurar su proveedor de sessionState para usar un proveedor personalizado. Debe especificar la región y las credenciales, ya sea un perfil o una combinación de clave secreta y acceso IAM. De forma predeterminada, esto creará una tabla llamada ASP.NET_SessionState.

<configuration>
  <system.web>
    <sessionState
      timeout="20"
      mode="Custom"
      customProvider="DynamoDBSessionStoreProvider">
      <providers>
        <add name="DynamoDBSessionStoreProvider"
             type="Amazon.SessionProvider.DynamoDBSessionStateStore"
             AWSProfileName="[PROFILE]"
             Region="[REGION]"
             CreateIfNotExist="true"
             />
      </providers>
    </sessionState>
  </system.web>
</configuration>


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow