Foros del Web » Programando para Internet » ASP Clásico »

sesion con scripting

Estas en el tema de sesion con scripting en el foro de ASP Clásico en Foros del Web. Hola estoy tratando de crear un diccionario pero utilizando sesiones, es esto posible? osea que necesito crear una coleccion pero con una variable sesion...
  #1 (permalink)  
Antiguo 14/06/2005, 12:53
Avatar de zeudio  
Fecha de Ingreso: enero-2002
Mensajes: 314
Antigüedad: 23 años, 3 meses
Puntos: 4
sesion con scripting

Hola

estoy tratando de crear un diccionario pero utilizando sesiones, es esto posible?

osea que necesito crear una coleccion pero con una variable sesion
  #2 (permalink)  
Antiguo 14/06/2005, 13:06
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Es decir, quieres crear un diccionario, y que una sesion contenga los elementos del diccionario?, claro que es posible, es algo pesado, pero posible.
Saludos.
  #3 (permalink)  
Antiguo 15/06/2005, 07:40
Avatar de zeudio  
Fecha de Ingreso: enero-2002
Mensajes: 314
Antigüedad: 23 años, 3 meses
Puntos: 4
ok, sabes como puedo hacerlo o donde puedo investigarlo? por que no me sale...

gracias
  #4 (permalink)  
Antiguo 15/06/2005, 08:02
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Lo primero que se hace es un sentencia condicional para comprobar si la sesion en la que guardarás el diccionario es un objeto, dicho de otra forma, se busca comprobar si la sesion ya ha sido referenciada al objeto diccionario. Si todavía no fue referenciada, quiere decir que no se creó el objeto diccionario, entonces lo creas. Posterior a eso viene el trabajo que tengas que hacer con el objeto diccionario, y luego que terminas tu tarea con el objeto, guardas los cambios en la sesion (lo referencias a la sesion).
Acá está el código, esto lo uso yo para un carro de compras, luego de la sentencia condicional lo que hago es hacer la tarea correspondiente con el objeto, en mi caso es añadir un nuevo elemento al objeto o si este existe actualizar la cantidad.

if isobject(session("carro")) then
set carro=session("carro")
else
'Si no creo el objeto diccionario CARRO
set carro = Server.CreateObject("Scripting.Dictionary")
end if

if carro.Exists(Id) then
carro(Id) = Cantidad
else
carro.Add Id, 1
end if

set session("carro") = carro

Espero que me haya explicado bien para que lo entiendas y te funcione.
Saludos!.
  #5 (permalink)  
Antiguo 15/06/2005, 11:03
Avatar de zeudio  
Fecha de Ingreso: enero-2002
Mensajes: 314
Antigüedad: 23 años, 3 meses
Puntos: 4
Muchas graciasc mariano, es precisamente lo que necesitaba.
  #6 (permalink)  
Antiguo 15/06/2005, 12:29
Avatar de zeudio  
Fecha de Ingreso: enero-2002
Mensajes: 314
Antigüedad: 23 años, 3 meses
Puntos: 4
otra cosilla, ya tengo listo todo, pero cuando quiero usar remove para borrar un registro de la coleccion me dice que no se encuentra, sabes a que se puede deber?, ya revise que la clave sea la adecuada. lo hago asi

carro.remove(clave)
  #7 (permalink)  
Antiguo 15/06/2005, 12:39
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Eso lo haces en una página aparte o en la misma página que creas el carro?
  #8 (permalink)  
Antiguo 16/06/2005, 08:26
Avatar de zeudio  
Fecha de Ingreso: enero-2002
Mensajes: 314
Antigüedad: 23 años, 3 meses
Puntos: 4
en una distinta
  #9 (permalink)  
Antiguo 16/06/2005, 10:43
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
claro, si lo haces en una página distinta no tienes que hacer carro.Remove(clave), sino que tienes que hacer sesion_que_contenga_el_carro.Remove(clave). Esto es porque una vez que sales de la página en donde creaste el carro, el objeto carro de por sí ya no esta más disponible como "carro" (o según el nombre que lo hayas creado), sino que estará disponible mediante la sesion que lo contiene.
Y en todas las páginas (excepto la página en donde creaste el objeto) que realices tareas con el objeto carro que creaste, tendrás que acceder a el mediante la sesion que lo contiene.
Si no quieres accederlo mediante la sesion, se me ocurre que podrías hacer algo así:

Dim carro

carro = session("Carro") 'Acá guardamos en la variable "carro" todos los datos de la sesion

carro.Remove(clave) 'Trabajas con la variable

session("Carro") = carro 'Y acá, los cambios que realizas con la variable "carro" los guardas nuevamente en la sesión

Un saludo y espero que te sirva.
  #10 (permalink)  
Antiguo 16/06/2005, 11:12
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años
Puntos: 2
Hola

Probaste esa sintaxis ?

Creo que debería ser como:

Dim carro

'Detalle, necesitas decir set... pero no he probado sin set
set carro = session("Carro")

carro.Remove(clave) 'Trabajas con la variable

session("Carro") = carro 'Y acá, los cambios que realizas con la variable "carro" los guardas nuevamente en la sesión

De la última línea, no estoy seguro si pasan estas dos cosas:

1. Si usas set VAR = session("OBJ"), entonces en VAR se crea completamente una colección nueva de elmentos, entonces al momento de hacer VAR.REMOVE, se hace solamente sobre ese objeto y no sobre session, por lo cual, la última línea sería totalmente necesaria.

2. Si usas set VAR = session("OBJ"), solamente se crea una instancia hacia session("OBJ"), entonces cuando haces VAR.REMOVE, automáticamente ya se elimino de session("OBJ"), porque VAR estaba apuntando a session("OBJ")

Por otra parte, quizás caso 1, pasa con SET, y caso dos pasa si no usas SET, pero es importante revisar ese caso y estar seguro, para ustedes que están realizando tantas modificaciones a ese objeto de SESSION.

Por otra parte, yo recomendaría que si pueden trabajar directo con el objeto en SESSION, pues es mejor que bajarlo a una variable local.

Pero si es perfectamente valido pasarlo por referencia a una función como:

mostrarProductos(session("OBJ"))

function mostrarProductos(ByRef obj)

Eso es totalmente correcto, pero me refiero, a que si lo usas en una misma página para algo rapido, pues mejor usarlo directo en SESSION, como...

session("Carro").Remove(clave) 'Trabajas con session

Así te evitas muchos movimientos en la memoria.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #11 (permalink)  
Antiguo 16/06/2005, 12:23
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Claro, estoy totalmente de acuerdo con vos Neuron, si eso es lo que yo le había mencionado al principio que hiciera. De hecho, es como lo hago yo en mi página.
Lo de pasar la sesion a una variable local nunca lo probé, pero se me había ocurrido que podía hacerse de esa forma, pero no lo probé, lo cual fue un error obviamente. Lo que si no estoy seguro que suceda es si eliminas la última linea si realmente se actualiza la sesion. No puedo probarlo, porque no me funcionan las páginas asp, pero sería cuestión de probar un poco para ver como funciona.
Y lo del SET me parece que tiene que ser con el, yo no lo agregué porque se me pasó realmente, pero supongo que debes poner la palabra reservada delante.
Un saludo Neuron!.
  #12 (permalink)  
Antiguo 16/06/2005, 12:49
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años
Puntos: 2
La teoría resulto correcta...

Hice este script sencillo para probar, y resulta que si, el SET es obligatorio, nunca lo habia probado hacer sin SET, por otra parte, al parecer todo comparte el mismo espacio de memoria, es como un apuntador a lo mismo, entonces si aplicas un remove a un elemento, se hace a todos.

Espero que les sirva a ustedes que estás usando objDict mucho en sus páginas.

Cita:

Dim objDict
Dim objTemp
Dim varElemento

'Crear el objeto para guardar las fotografías.
set objDict = CreateObject("Scripting.Dictionary")

objDict.Add "intVar1", 1
objDict.Add "intVar2", 2
objDict.Add "intVar3", 3

set Session("objDictS") = objDict

Response.Write "Inicializados: <br><br>"

Response.Write "Variable objDict: <br>"
For Each varElemento in objDict
Response.Write varElemento & " : "& objDict.Item(varElemento)& "<br>"
Next

Response.Write "<br>Session objDictS: <br>"
For Each varElemento in Session("objDictS")
Response.Write varElemento & " : "& Session("objDictS").Item(varElemento)& "<br>"
Next

Response.Write "<br><hr><br>"

Response.Write "Borrando usando set en una variable objTemp: <br><br>"
set objTemp = Session("objDictS")
objTemp.Remove("intVar2")

Response.Write "Variable objTemp: <br>"
For Each varElemento in objTemp
Response.Write varElemento & " : "& objTemp.Item(varElemento)& "<br>"
Next

Response.Write "<br>Variable objDict: <br>"
For Each varElemento in objDict
Response.Write varElemento & " : "& objTemp.Item(varElemento)& "<br>"
Next

Response.Write "<br>Session: <br>"
For Each varElemento in Session("objDictS")
Response.Write varElemento & " : "& Session("objDictS").Item(varElemento)& "<br>"
Next

Response.Write "<br><hr><br>"

Response.Write "Borrando directo en el objeto de memoria: <br><br>"
Session("objDictS").Remove("intVar1")

Response.Write "Variable objTemp: <br>"
For Each varElemento in objTemp
Response.Write varElemento & " : "& objTemp.Item(varElemento)& "<br>"
Next

Response.Write "<br>Variable objDict: <br>"
For Each varElemento in objDict
Response.Write varElemento & " : "& objTemp.Item(varElemento)& "<br>"
Next

Response.Write "<br>Session: <br>"
For Each varElemento in Session("objDictS")
Response.Write varElemento & " : "& Session("objDictS").Item(varElemento)& "<br>"
Next
Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #13 (permalink)  
Antiguo 16/06/2005, 13:11
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Gracias Neuron, buena prueba, lástima que no pueda probarla para ver los resultados, aunque obviamente con la conclusión que se saca de esto ya es más que suficiente.
Saludos!.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:22.