• Domingo 22 de Diciembre de 2024, 13:56

Autor Tema:  Session, Application O Qué?????  (Leído 6269 veces)

carlos_lue

  • Miembro activo
  • **
  • Mensajes: 83
    • Ver Perfil
Session, Application O Qué?????
« en: Lunes 27 de Junio de 2005, 21:26 »
0
hola a todos:

como introducción les menciono que estoy realizando una aplicacion en la cual utilizo aproximadamente 150 variables de las cuales 130 actualizan su valor en el transcurso de la aplicacion, por ejemplo:

while Not rs.Eof
----------->aquí las variables cambian de valor tantas veces como registros tenga la tabla "rs"
                 a = a + 1
por decir    a = a  + e         etc..     la cuestion esque las variables van cambiando de valor, para eso tengo las variables declaradas como globales para que conserven el valor y lo vallan actualizando pero si entran dos usuarios y uno realiza la operacion un poco despues que el otro las variables se modifican para ambos usuarios por igual..


lo que quiero es que la aplicacion respete y solo haga cambios en las variables de cada usuario, creo ques es con variables de session pero mi pregunta es si tengo que ponder las 150 variables o existe alguna forma de poner una como si fuera un arreglo, o si existe alguna otra forma mas efectiva y sencilla.
                 
loop

bueno me despido esperando me puedan ayudar.......

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #1 en: Martes 28 de Junio de 2005, 08:17 »
0
Hola

De primeras se me ocurre decirte que todo depende de tu aplicacion y de como quieres  hacerlo.

Cuando mencionas que tienes 150 variables globales y que si 2 usuarios estan trabajando a la vez se modifican las variables quedandose con el mismo valor para ambos usuarios. Me vienen 2 preguntas a la cabeza:

¿Para que se necesitan tantas variables?
¿En que ambito se declaran esas variables para que se modifiquen para todos los usuarios de la aplicacion?

Pero bueno, para poder darte alguna respuesta y que pueda ser de utilidad mi aporte, te dire que el Objeto Session es independiente para cada usuario, asi que lo que declaras en ese ambito solo es visible para ese usuario.

Saludos.
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

carlos_lue

  • Miembro activo
  • **
  • Mensajes: 83
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #2 en: Martes 28 de Junio de 2005, 20:53 »
0
hola gracias por tu aportacion.


mira tengo 150 variables porque con ellas realizo diferentes operaciones y un ciclo que depende de las opciones seleccionadas, ejemplo:  digamos que el ciclo es de 50 repeticiones y que en el transcurso de cada vuelta las variables van modificando su valor a traves de diferentes operaciones y al final del ciclo se almacenan todas en varias tablas..

para que sean publicas esas variables las declaro en un archivo de codigo  *.vb como public variable as integer ejemplo

bueno el numero de variables no lo puedo cambiar.

ahora la duda que se me viene a la mente es: tengo que declarar 150 variables de session y si eso no repercute en el rendimiento del sistema?

graicas por cualquier comentario.. saludos.

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #3 en: Miércoles 29 de Junio de 2005, 08:13 »
0
Hola,

Queda claro que el numero de variables es necesario. Lo que no me queda muy claro es que como es posible que se modifiquen las variables para dos usuarios distintos.

¿Las has creado estáticas?¿Como variables de aplicacion?

Respecto a lo de declararlas como varibles de sesion... Pues supongo que repercute en el rendimiento pero ¿que otra solucion puede haber si quieres que las variables sean únicas para cada usuario?

A mi no se me ocurre nada mejor.

Saludos
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

carlos_lue

  • Miembro activo
  • **
  • Mensajes: 83
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #4 en: Miércoles 29 de Junio de 2005, 18:53 »
0
gracias por el interes de ayudar, los consejos me han servido de mucho.


que pasaria si yo declaro todas mis 150 variables en el apartado en donde se declaran los componentes cuando los colocamos en el WebForm para que sean globales pero nadamas para la pagina, es decir que las pueda utilizar en cualquier funcion o procedimiento dentro de la pagina.  Las variables serian independientes para cada usuario o si entran dos usuarios al mismo tiempo se compartirian los valores??????????

Citar
#Region " Código generado por el Diseñador de Web Forms "

    'El Diseñador de Web Forms requiere esta llamada.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub
    Protected WithEvents btnatras As System.Web.UI.WebControls.Button
    Protected WithEvents visualizar As System.Web.UI.WebControls.Button
    Protected WithEvents calcular As System.Web.UI.WebControls.Button


  ' mis variables declaradas, es un ejemplo con pocas variables 

    Dim regionn, regions, variedad, scl, sl, loam, clay, ciclo As String
    Dim seed, anioc, mesc, diac, nsitio, sitio, emergencia, tuc As Integer
   

    'NOTA: el Diseñador de Web Forms necesita la siguiente declaración del marcador de posición.
    'No se debe eliminar o mover.
    Private designerPlaceholderDeclaration As System.Object

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #5 en: Jueves 30 de Junio de 2005, 08:20 »
0
Hola otra vez,

Si declaras las variables en la página, serán independientes para cada usuario (en eso tienes razon). Pero hay un problema: Cada vez que se llama a la página perderán sus valores a no ser que los guardes de alguna manera. Esto se debe a que las aplicaciones Web son stateless (sin estado).

Para guardar los valores hay distintas opciones entre las que se encuentran las siguientes (cada una con sus ventajas e inconvenientes):

-APlicacion: Lo malo es que se son únicas para todos los usuarios
-Sesion: Se utiliza mucha memoria
-ViewState: Se genera mucho trafico entre el cliente y el servidor

Viendo esto, en mi opinion lo de las variables de sesion es la mejor opcion.

Saludos
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

carlos_lue

  • Miembro activo
  • **
  • Mensajes: 83
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #6 en: Viernes 1 de Julio de 2005, 17:37 »
0
hola Guorker

muchas gracias por la paciencia y los consejos, ya esta resulto utilizaré algunas variables de session y las demas las declaro globales en la pagina.  gracias y saludos.

laurfie

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #7 en: Miércoles 11 de Enero de 2006, 19:09 »
0
Hola!

Mi problema/duda es la siguiente:

En el código de mi WebForm tengo una variable de tipo int, que la utilizo como una especie de contador, y cada vez que el usuario realiza un click en un botón, esta se incrementa en 1, realizo otras operaciones y "cargo" en un TextBox del WebForm unos datos.
El problema llega cuando se "refresca" la ventana(al cargar los datos del TextBox), que pierdo el valor de esta variable.¿Por qué? ¿Qué me estoy olvidando?

He probado declarar esta variable en la zona del "Page_Load" despues de comprobar: if (!IsPostBack), pero al usar la variable está fuera de ámbito.

También he intentado declararla como una variable Session (no me parece muy correcto, pero bueno), pero luego no tengo la opcion de "convertir" la variable de tipo 'object' a tipo 'int', sólo puedo a tipo 'string'

Me gustaría hacer lo mismo con otro tipo de variables, como por ejemplo:
string[][]
¿Es tan raro lo que propongo?

Muchas gracias.

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #8 en: Jueves 12 de Enero de 2006, 08:31 »
0
Hola,

Tu problema es bastante comun. Tienes que tener en cuenta que una página Web no guarda el estado por lo que cada variable de la página pierde su valor en cada postback (ida y vuelta al servidor).

Se pueden guardar los valores de las variables en el objeto Session, Application o ViewState y despues recuperarlo de ahí. Yo creo que si solo es una variable y de tipo int, lo mas adecuado es que lo guardes en Session o ViewState.

Por lo de que no puedes pasarlo de Object a Int... me parece raro si lo que habias guardado era un int. ¿Como has intntado convertirlo?

Yo creo que seria así:

Guardar variable:
Código: Text
  1.  
  2. Session[&#34;var&#34;] = 8;
  3. o
  4. ViewState[&#34;var&#34;] = 8;
  5.  
  6.  

Y para Recuperarlo:
Código: Text
  1.  
  2. int miVar = (int)Session[&#34;var&#34;];
  3. o
  4. int miVar = (int)ViewState[&#34;var&#34;];
  5.  
  6.  

Saludos y a ver si lo consigues!!
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

laurfie

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #9 en: Jueves 12 de Enero de 2006, 17:20 »
0
Muchas Gracias!!

Al final lo he resuelto con variables Session.
Probaré con las ViewState (no sabía ni que existían) de todos modos.

Ah! no me convertía a tipo int porque no había puesto '(int)'
 :P

Muchas gracias de nuevo, y sobre todo por la rapidez de la respuesta.

laurfie

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #10 en: Miércoles 8 de Marzo de 2006, 20:31 »
0
Hola de nuevo!

Tengo una "pequeña duda".
Utilizo una variable Session que inicializo cuando un usuario se ha identificado correctamente en mi aplicacion web, y cuando el usuario abandona la sesion la borro.

La utilizo como medida de "seguridad", para que ningún usuario no autorizado tenga acceso a los formularios de la aplicacion. Compruebo su valor en el "Page_Load" de cada formulario, y si su valor no coincide con el valor que asigno en un principio, pues redirecciono al usuario a una página de error.

El problema surge cuando el usuario abandona la sesion. Debo de borrar y/o eliminar mal este tipo de variables, porque si a continuación pongo en la barra de direcciones del navegador la ruta de una de las páginas de la aplicacion, que no sea la index.aspx, entra de todas formas.

Inicializacion de la variable:   Session["seguridad"]="true";
Borrado de la variable:          Session["seguridad"]="false";
      o bien (he probado de todo)
         Session.Contents.RemoveAll();
         Session.Clear();
         Session.RemoveAll();
         Session.Abandon();

Espero haberme explicado.

Muchas gracias de antemano.

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #11 en: Jueves 9 de Marzo de 2006, 11:20 »
0
Hola,
yo creo que lo que te pasa es que la pagina está cacheada en el cliente y que por eso se te muestra.

Prueba lo siguiente:
-Accedes normal a la aplicacion.
-Cierras la sesion
-Pones una dir. en la barra de direcciones
-Una vez cargada la pagina a la que no deberías tener acceso pulsa F5 (refrescar)

Si despues de eso sigues estando en la pagina que no deberias... revisa tu codigo porque lo que tendría que pasar es que te lleve a tu pagina de error.

Saludos
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

laurfie

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #12 en: Jueves 9 de Marzo de 2006, 17:19 »
0
Hola Güoker!

He hecho lo que dices, y sí me redirecciona a mi página de error.
Así que he estado investigando cómo borrar la cache del cliente, ya que no me interesa que un usuario no válidado tenga acceso. Y he encontrado ésto que me ha sido de utilidad.

(Lo escribo tal y como lo encontré, por si a alguien también le ayuda)
==========
Para setear los valores de Cache en las Paginas:

Usando la Directiva  @OutputCache :
Client Cache :
<%@ OutputCache Duration="60" Location="Client" %>

Proxy Server Cache :
<%@ OutputCache Duration="60" Location="Downstream" %>

Server Cache:
<%@ OutputCache Duration="60" Location="Server" %>

No Cache:
<%@ OutputCache Location="None" %>

Con ésta última, al presionar el botón "Atras" del Explorador, éste carga la página de nuevo desde el servidor, por lo que las validaciones hechas ya funcionan, no es necesario validar el User en cada pagina, eso lo hace la aplicación al setear Autenticación por formularios en el Web.Config.
==========

Ah!! y muchas gracias por tu interés y rapidez.

ErWillem

  • Miembro activo
  • **
  • Mensajes: 55
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #13 en: Jueves 9 de Marzo de 2006, 19:01 »
0
Muchas gracias por la información del cache, en realidad buscaba otra información pero eso era algo que tenia en mi lista de cosas pendientes :lol:

Gracias por tu ayuda. Saludos  :hola:
Enlace a mis programas realizados durante mis estudios.
--------------------------------------------------------------
Si la vida te da limones, pide sal y tequila.

La fe mueve montañas, pero hay que pagar.

El ser humano es el unico que tropieza dos veces con la misma piedra.

ErWillem

  • Miembro activo
  • **
  • Mensajes: 55
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #14 en: Jueves 9 de Marzo de 2006, 21:23 »
0
Bueno, ya lo probe y me di cuenta que en verdad no es lo que queria  :(

Lo que necesito es lo siguiente: Que al momento en que algun usuario le de a la flecha hacia atras la pagina se recargue, eso para evitar, por dar ejemplos, que un usuario guarde dos veces los datos con cambiar solo un campo, o que el usuario no pueda imprimir 2 veces un mismo resultado... eso por dar algunos ejemplos sencillos. Si alguien me puede ayudar...
Enlace a mis programas realizados durante mis estudios.
--------------------------------------------------------------
Si la vida te da limones, pide sal y tequila.

La fe mueve montañas, pero hay que pagar.

El ser humano es el unico que tropieza dos veces con la misma piedra.

sergiotarrillo

  • Moderador
  • ******
  • Mensajes: 1059
    • Ver Perfil
    • http://sergiot2.com/blog
Re: Session, Application O Qué?????
« Respuesta #15 en: Domingo 19 de Marzo de 2006, 19:57 »
0
puedes detallar un poco mas tus ejemplos ultimos.

Saludos,


Sergio Tarrillo
Blog]miBlog[/url]

No me visiten!

ChAmP

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #16 en: Jueves 20 de Abril de 2006, 12:06 »
0
Hola chic@s. Tengo un problema que no consigo encontrar por ningun lado. Cuando usamos el viewstate, no tenemos problema de concurrencia como en una variable global y ademas con la ventaja de que se guarda en el servidor. Pero tiene una pega que vamos a ver como la solucionamos. Si yo tengo una pagina cargada con su viewstate(hasta aqui perfecto) y quiero abrir otra ventana de la misma pagina(archivo->nuevo->ventana) se duplica que se duplica el viewstate, no se resetea, lo cual es problematico porque si yo estoy guardando por ejemplo un el orden de un datagrid, en la nueva pagina estará el de la antigua, cuando no debería tener nada; otro ejemplo es que yo guarde un número calculado con campos de la web, en la nueva página no debería estar. Alguien sabe como solucionar este problema? Muchas gracias de ante mano. Si alguien quiere agregarme: championer@hotmail.com

ChAmP

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Session, Application O Qué?????
« Respuesta #17 en: Lunes 8 de Mayo de 2006, 12:54 »
0
Vamos a ver, por ejemplo. Una web con un grid donde tengo dos columnas, las dos ordenables. Cuando salta el evento de ordenación necesito saber cual es el ultimo campo por el que se ordeno el grid, y si fue ascendente o descendente, para poder ordenar el dataview que es el origen de datos del datagrid. en un principio lo guardo en una variable del viewstate y asi lo puedo recuperar la siguiente vez que haga postback. empiezo la ejecucion y pincho la columna a para que se ordene asc. Ahora abro una replica de la web, y en esta replica pincho en la misma columna. Al ser una web nueva debería volver a ordenarse ascendentemente, pero como el viewstate es una copia de la otra web se ordena descendente puesto que mi nueva variable del viewstate lleva que la ultima ordenación fue, A asc. Es incorrecto. Por ahora lo he arreglado con un input oculto pero me gustaria saber si se puede hacer con viewstate. Gracias y un saludo

sergiotarrillo

  • Moderador
  • ******
  • Mensajes: 1059
    • Ver Perfil
    • http://sergiot2.com/blog
Re: Session, Application O Qué?????
« Respuesta #18 en: Viernes 4 de Agosto de 2006, 01:55 »
0
y no se puede hacer que el load, se resetee todo el ordenamiento?,

Claro este depende de como haces la replica de la otra web?, de la misma página o de otra?

Saludos,


Sergio Tarrillo
Blog]miBlog[/url]

No me visiten!