2010-02-26 32 views
6

Estoy creando una aplicación Asp.net. Necesito guardar un HashTable en una sesión.Donde debería declarar una variable de sesión en asp.net

En carga de la página que estoy escribiendo

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     Session["AttemptCount"]=new Hashtable(); //Because of this line. 
    } 
} 

Aquí problema es que cuando un usuario actualizar la página, sesión [ "AttemptCount"] también refrescarse. Quiero saber dónde debería declarar

Session["AttemptCount"]=new Hashtable(); 

Así que mi seesion no consiga refeshed.

EDIT En Global.asax, esta sesión se iniciará tan pronto como el usuario abra el sitio web. Quiero crear esta sesión solo si el usuario va a una página en particular. es decir, Login.aspx

Respuesta

14

hacerlo en el método Session_Start en su Global.asax así ...

protected void Session_Start(object sender, EventArgs e) 
{ 
    Session["AttemptCount"]=new Hashtable(); 
} 

Actualización:

Entonces simplemente hacer una comprobación para ver si existe la variable de sesión, si él doesn Solo entonces crea la variable. Se podría pegarlo en una propiedad para hacer las cosas más limpio al igual que ...

public Hashtable AttemptCount 
{ 
    get 
    { 
     if (Session["AttemptCount"] == null) 
      Session["AttemptCount"]=new Hashtable(); 
     return Session["AttemptCount"]; 
    } 
} 

Y entonces se podría llamar simplemente en la propiedad AttemptCount siempre que se necesite al igual que ...

public void doEvent(object sender, EventArgs e) 
{ 
    AttemptCount.Add("Key1", "Value1"); 
} 
+0

En Global.asax, esta sesión obtendrá comenzó, tan pronto como el usuario abre el sitio web. Quiero crear esta sesión solo si el usuario va a una página en particular. es decir, Login.aspx –

+0

He actualizado mi respuesta, simplemente deberá verificar si existe marcando el nulo –

+0

¿Qué almacena en la tabla hash? ¿Es la cantidad de veces que el usuario intentó ingresar? –

0

Mire Global.asax y Application_Started (creo) y hay también una para la sesión iniciada.

2

prueba si existe primero

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     if(Session["AttemptCount"] == null) 
     { 
      Session["AttemptCount"]=new Hashtable(); //Because of this line. 
     } 
    } 
} 

aunque el session_start es mejor, sólo tiene que lo utiliza en una página, pero se puede crear para cada sesión.

3

Se podría hacer una propiedad como esta en su página:

protected Hashtable AttemptCount 
{ 
    get 
    { 
    if (Session["AttemptCount"] == null) 
     Session["AttemptCount"] = new Hashtable(); 
    return Session["AttemptCount"] as Hashtable; 
    } 
} 

entonces usted puede utilizarlo sin tener que preocuparse:

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.AttemptCount.Add("key", "value"); 
} 
1
Hashtable hastable_name=new Hashtable() 
Session["AttemptCount"]=hastable_name 
Cuestiones relacionadas