
IntraWeb
#1
Escrito 07 julio 2011 - 02:23
#2
Escrito 07 julio 2011 - 02:48
Saludos.
#3
Escrito 08 julio 2011 - 05:25
Necesito saber del lado del servidor cuando el usuario de la aplicación IntraWeb cierra el navegador para cerrar la sesión. El problema es que cuando el usuario cierra el navegador la sesión se queda abierta y cuando lo abre de nuevo e intenta entrar a la aplicación esta se queda colgada. Soy nuevo en programación web, en Delphy y también en IntraWeb así que no se como resolver esto pero tengo la exigencia de desarrollar una aplicación Intra Web así que tendré que aprender rápidamente.
En el datamodule ServerController tienes un evento OnCloseSession. Pero la verdad es que no creo que funciona como esperas. Ya que si no estoy equivocado, el Servidor no tiene forma de detectar si el usuario cierra el navegador. Por eso tienes la propiedad SessionTimeOut (también en el ServerController), solo cuando pasa ese tiempo de TimeOut se va a cerrar la sesión y se va a disparar ese evento.
La verdad es que la aplicación no debería quedarse colgada por volver a entrar en la aplicación, simplemente te debería dejar de nuevo en el estado en que se encontraba la sesión cuando la abandonaste. NOTA: Yo ponía un botón de Cerrar Sesión en mis programas Intraweb : WebApplication.Terminate('Sesión finalizada');
Yo en tu caso, pondría puntos de bloqueo en todos los eventos del ServerController y UserSession, para ver que código se dispara cuando vuelves a entrar en la aplicación, a ver si puedes detectar el problema.
Saludos.
#4
Escrito 13 julio 2011 - 01:41
Marc a que te refieres con poner puntos de bloqueo en los eventos del ServerControler y UserSession? Soy nuevo en IntraWeb asi que si me puedes decir como lo hago te lo voy a agradecer.
Ademas necesito saber como o donde debo declarar una variable que sea de ambito global a la session del usuario y como puedo modificarla con un javascript desde cualquier pagina?
#5
Escrito 14 julio 2011 - 01:43
Marc a que te refieres con poner puntos de bloqueo en los eventos del ServerControler y UserSession? Soy nuevo en IntraWeb asi que si me puedes decir como lo hago te lo voy a agradecer.
En Intraweb puedes utilizar el depurador como si fuera cualquier otro programa Delphi.
Para ello, te puedes posicionar en cualquier línea de tu código y pulsando la tecla F5 (o utilizando el ratón) estableces un punto de bloqueo.
Cuando la ejecución de tu programa llegue a ese punto, se va a detener y lo vas a poder seguir ejecutando línea a línea con las teclas F7 y F8, inspeccionando el valor de las variables, etc. ...
Los módulos UserSession y ServerController tienen eventos relacionados con las sesiones de usuario (se ejecutan al crearse y al destruirse sesiones), establece un punto de bloqueo del depurador en ese código, y cuando el depurador se detenga en esos puntos, sabrás cuando exactamente se están creando y destruyendo las sesiones, y el código que se ejecuta. Eso debería poder ayudarte a identificar el código que bloquea tu programa.
Ademas necesito saber como o donde debo declarar una variable que sea de ambito global a la session del usuario y como puedo modificarla con un javascript desde cualquier pagina?
Para definir una variable que sea de ámbito par el usuario, la tienes que definir pública en el módulo UserSession (cada sesión que se abra de usuario, va a cargar su propio módulo UserSession).
Desde otros módulos la podrás consultar por UserSession.MiVariable
Donde no te puedo ayudar es respecto a JavaScript. Nunca lo he utilizado y no conozco la interficie entre Delphi y JavaScript.
NOTA: Por cierto, para programar una aplicación Web en Delphi tienes una opción que en mi opinión es bastante mejor a Intraweb (está basada en los componentes Javascript Ext JS)
http://www.unigui.com/
Saludos.
#6
Escrito 16 noviembre 2011 - 09:31
Estoy trabajando con Intraweb 11 y Delphi XE.
Tengo varias cosas hechas y funcionando, pero necesito poder hacer que el cliente que usará el programa pueda setear el tiempo de sesion (SessionTimeout). Lo que hago es levantar los datos "cambiables" desde un ini:
[SERVIDOR]
PUERTO=7845
COMPRESIONNIVEL=9
SESSIONTIMEOUT=1
CACHEEXPIRY=10
Cuando se crea el servidor carga los datos del ini y los actualiza bien, salvo el SessionTimeOut que SIEMPRE me pone 20 minutos. En tiempo de diseño lo tengo con 60 minutos, así que no tengo idea de donde saca los 20... y además cuando le manda el valor no lo cambia:
//ini.SERVIDORSESSIONTIMEOUT = 1
Self.SessionTimeout := ini.SERVIDORSESSIONTIMEOUT;
// Self.SessionTimeout = 20 ???
Si alguien me puede ayudar, le estaría muy agradecido.
#7
Escrito 16 noviembre 2011 - 11:53
El problema estaba en que compramos la versión Standard de Intraweb que no permite cambiar el tiempo de Sesion, pero logré "engañarlo". En vez de tiempo por servidor lo hago cuando crea cada sessión:
procedure TIWServerController.IWServerControllerBaseAfterRender(ASession: TIWApplication; AForm: TIWBaseForm); begin //Como no me deja cambiar el tiempo de sessión del servidor (por la licencia), lo cambio para cada session ASession.SessionTimeOut := ini.SERVIDORSESSIONTIMEOUT; end;
Esto funcionó bien...
Quizás a alguien le sirva...