2012-02-02 15 views
7

Esta es una pregunta sobre ColdFusion/mobile. Tengo una aplicación web simple con una página de inicio de sesión. El usuario escribe su información de inicio de sesión, se asigna la información de la sesión y se lleva a la página de proyectos . Esto funciona bien, pero cuando intento configurar un inicio de sesión automático (el usuario hace clic en un marcador en su pantalla de inicio que transfiere un nombre de usuario y contraseña), el proceso mismo debería ocurrir, pero la información de sesión se pierde una vez que se toman la página de proyectos. Esto ocurre en BlackBerry 9370 (con pantalla táctil, no seguro del tipo de modelo), pero funciona bien cuando se prueba en un navegador y en el simulador de BlackBerry . Aquí hay algo de código para el inicio de sesión automático:Información de sesión perdida en BlackBerry (aplicación ColdFusion)

<cfquery name="qryAccount"> 
    EXEC m_AccountLogin 
      @Username = <cfqueryparam value="#LCase(url.u)#" cfsqltype="cf_sql_varchar">, 
      @Password = <cfqueryparam value="#LCase(url.p)#" cfsqltype="cf_sql_varchar">; 
</cfquery> 

<cfif qryAccount.recordcount> 
    <cflock name="lockAccount" type="exclusive" timeout="10"> 
     <cfset session.account = { 
       isLoggedIn = true, 
       MemberID = qryAccount.iMemberID, 
       Role  = qryAccount.iRole }> 
    </cflock> 

    <cflocation url="/mobile/home/projects.cfm" addtoken="true"> 
<cfelse> 
    <cflocation url="/mobile/index.cfm" addtoken="true"> 
</cfif> 

leí que el uso de <cflocation> justo después de la asignación de VARs sesión puede causar un problema, por lo que optó por una re-JavaScript directa y todavía se quedó corto. ¿Algunas ideas?

+0

Me pregunto qué pasaría si agregara manualmente los tokens a la URL. –

Respuesta

1

No puedo evitar pensar que esto puede ser un error en el navegador BB, que es bastante cojo para empezar (IMO hace que IE6 parezca utilizable).

Para fines de prueba, ¿es práctico eliminar la ubicación de la página de proyectos y poner allí un enlace en el que se pueda hacer clic? Me gustaría ver si funciona de esa manera. Si lo hace, entonces, por alguna razón, la ubicación de la conexión está perdiendo. Ese no debería ser el caso, ya que estás en CF9, pero sería bueno probarlo de una forma u otra.

1

Después de CF7, Adobe solucionó el problema de establecer variables de sesión en la misma solicitud que una etiqueta <cflocation>. Esto ya no es un problema.

La causa probable para que su sesión se caiga es que BlackBerry está borrando sus cookies de sesión (cfid, cftoken o jsessionid) cuando inicia el navegador desde un marcador de pantalla de inicio. He visto este mismo comportamiento en el iPhone también, es posible que BB también lo esté haciendo.

para confirmar (o negar) que este es el caso, configure una página simple que da salida:

<cfdump var="#session#"> 
<cfdump var="#getHttpRequestData()#"> 

Vaya a esta página en su BB la manera "normal" tecleando la URL manualmente. La primera vez que se cargue la página, se creará una sesión (y se enviarán las cookies de sesión asociadas). Vuelva a cargar la página y verá en el volcado de datos de solicitud http un encabezado llamado cookie (request.headers.cookie). Esto contendrá la misma información de sesión que ve en el volcado de sesión sobre ella.

Ahora, use el marcador de la pantalla de inicio para cargar la página. Si BB está, de hecho, borrando las cookies de sus sesiones, entonces el request.headers.cookie no estará allí y se le darán nuevos identificadores de sesión.

+0

¿Esto también se aplicaría a los dispositivos Android y iPhone? – Whatevo

+0

@Joshua, hemos visto este comportamiento en iPhones al iniciar desde la pantalla de inicio. No he probado en Android. – jalpino

+0

No tuve un problema en iPhone o Android.Tampoco tuve ningún problema en una versión posterior del sistema operativo BlackBerry. Creo que fue 7, pero todo lo que estaba debajo tenía problemas. – Whatevo

1

¿Ya ha intentado utilizar las etiquetas CFHEADER para redirigir en lugar de la ubicación? Ejemplo:

<CFHEADER STATUSCODE="302" STATUSTEXT="Object Temporarily Moved"> 
<CFHEADER NAME="location" VALUE="/mobile/home/projects.cfm"> 

Necesita estas dos etiquetas para que la redirección funcione. Sugiero también agregar un CFABORT al final para imitar la forma en que CFLOCATION también detiene la ejecución de la página actual.

Cuestiones relacionadas