2012-03-08 33 views
11

Tengo un proyecto asp.net con el código C# detrás. Tengo una clase estática llamada GlobalVariable donde almaceno cierta información, como el producto seleccionado actualmente, por ejemplo.Asp.net session variable

Sin embargo, vi que cuando hay dos usuarios que usan el sitio web, si uno cambia el producto seleccionado, si lo cambia para todo el mundo. Las variables estáticas parecen ser comunes a todos.

Me gustaría crear (desde el código C#) algún tipo de variable de sesión utilizada solo desde el código C#, pero no solo desde la página, sino desde cualquier clase.

+0

variables estáticas a través de su aplicación. Las sesiones se usan para almacenar y acceder a las variables dentro de un inicio de sesión y cierre de sesión. Use una base de datos para que sus variables sobrevivan a sus sesiones y a su aplicación. Para compartir datos entre varias aplicaciones, use un caché distribuido y almacene su [sesión de ASP.NET] (http://www.alachisoft.com/ncache/session-index.html) en un caché. –

Respuesta

22

Sí, las variables estáticas son compartidas por toda la aplicación, de ninguna manera son privadas para el usuario/sesión.

Para acceder al objeto Session de una clase que no sea de página, debe usar HttpContext.Current.Session.

+0

Guau, tan simple ^^ Gracias. – Amaranth

+3

@Mathieu Recuerde comprobar nulo, ya que la sesión no siempre se creará para cada solicitud. Por ejemplo, los manejadores simples, como los archivos .ashx, no se configuran de manera predeterminada para crear el objeto Session. –

+0

Apropos, http://stackoverflow.com/questions/1382791/asp-net-what-to-do-if-current-session-is-null/1382811#1382811 – driis

8

GlobalVariable es un nombre engañoso. Como se llame, no debería ser static si es por sesión. Usted puede hacer algo como esto en su lugar:

// store the selected product 
this.Session["CurrentProductId"] = productId; 

Usted no debe tratar de hacer la colección Session accesible a nivel mundial tampoco. En su lugar, pase solo los datos que necesita y obtenga/configure usando Session cuando corresponda.

Aquí hay una descripción general sobre cómo trabajar con session storage in ASP .NET en MSDN.

+0

Gracias por proporcionarnos un ejemplo de cómo usar Session . – Ernest

7

Has respondido a tu pregunta. Una respuesta está en variables de sesión. En su clase GlobalVariable, puede colocar propiedades respaldadas por variables de sesión.

Ejemplo: se accede

public string SelectedProductName 
{ 
    get { return (string)Session["SelectedProductName"]; } 
    set { Session["SelectedProductName"] = value; } 
}