2012-02-02 9 views
7

Questa è una domanda ColdFusion/mobile. Ho una semplice app web con una pagina di accesso. L'utente digita le proprie informazioni di accesso, le informazioni sulla sessione vengono assegnate e vengono indirizzate a una pagina di progetti . Funziona bene, ma quando provo a configurare un accesso automatico (l'utente fa clic su un segnalibro nella schermata iniziale che passa un nome utente e una password), dovrebbe verificarsi lo stesso processo, ma le informazioni sulla sessione vengono perse non appena vengono prese per la pagina dei progetti. Ciò si verifica su BlackBerry 9370 (con touchscreen, non su sicuro del tipo di modello), ma funziona correttamente durante il test in un browser e il simulatore BlackBerry . Ecco po 'di codice per il login automatico:Informazioni sulla sessione perse su BlackBerry (app 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> 

Ho letto che l'utilizzo di <cflocation> subito dopo l'assegnazione di Vars sessione può causare un problema, così ho provato un JavaScript ri-diretto e ancora si avvicinò a breve. Qualche idea?

+0

Mi chiedo cosa succederebbe se si aggiungessero manualmente i token all'URL. –

risposta

1

Non posso fare a meno di pensare che questo potrebbe essere un bug nel browser BB, che è piuttosto zoppo per cominciare (IMO rende IE6 aspetto utilizzabile).

Per motivi di prova, è pratico rimuovere la cflocation nella pagina dei progetti e inserire invece un collegamento selezionabile? Mi piacerebbe solo vedere se funziona in questo modo. Se lo fa, allora per qualche ragione, cflocation sta causando la perdita della sessione. Questo non dovrebbe essere il caso dato che sei su CF9, ma sarebbe bello provare in un modo o nell'altro.

1

Dopo CF7, Adobe ha risolto il problema di impostare le variabili di sessione nella stessa richiesta di un tag <cflocation>. Questo non è più un problema.

La causa probabile dell'abbandono della sessione è che BlackBerry sta cancellando i cookie di sessione (cfid, cftoken o jsessionid) quando avvia il browser da un segnalibro della schermata iniziale. Ho visto questo stesso comportamento anche nell'iPhone, è possibile che anche BB lo stia facendo.

per confermare (o negare) che questo è il caso, impostare una semplice pagina che emette:

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

Passare a questa pagina sul proprio BB il modo "normale" digitando l'URL manualmente. La prima volta che viene caricata la pagina, verrà creata una sessione (e inviata nuovamente i cookie di sessione associati). Ricarica la pagina e vedrai nel dump dei dati della richiesta http, un'intestazione chiamata cookie (request.headers.cookie). Questo conterrà le stesse informazioni sulla sessione che vedi nel dump della sessione sopra di esso.

Ora, utilizzare il segnalibro della schermata iniziale per caricare la pagina. Se BB sta di fatto cancellando i cookie delle sessioni, allora lo request.headers.cookie non sarà lì e verranno forniti nuovi identificativi di sessione.

+0

Ciò vale anche per i dispositivi Android e iPhone? – Whatevo

+0

@Joshua, abbiamo visto questo comportamento sugli iPhone quando si avvia dalla schermata principale. Non ho provato su Android. – jalpino

+0

Non ha avuto problemi su iPhone o Android.Inoltre non ha avuto problemi su una versione successiva del SO BlackBerry. Credo che fosse 7, ma qualcosa di seguito ha avuto problemi. – Whatevo

1

Hai già provato a utilizzare i tag CFHEADER per reindirizzare invece di cflocation? Esempio:

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

Per il reindirizzamento sono necessari entrambi questi tag. Suggerisco anche di aggiungere un CFABORT alla fine per simulare il modo in cui CFLOCATION ferma anche l'esecuzione della pagina corrente.