2015-06-12 27 views
9

La mia applicazione è stata sviluppata usando Zend 1.11 che funzionava bene su Linux. Come richiesto, ho spostato l'applicazione su Windows 7 che ha IIS 7, PHP 5.4.39, MSSQL Server 2012.Il reindirizzamento delle applicazioni Zend non funziona dopo la migrazione su Windows con IIS

Il problema è che dopo aver inviato le credenziali di accesso, l'utente non viene reindirizzato alla pagina iniziale ma rimane acceso la stessa pagina (login). Dopo aver eseguito il debug del codice sorgente, sono venuto a sapere che l'utente è autenticato dal database con esito positivo, ma dopo aver reindirizzato l'utente al controller dell'indice, l'utente viene reindirizzato alla pagina di accesso. Nessun errore viene visualizzato dall'applicazione anche se iis log non mostra alcun errore.

Ho pensato che potrebbe essere il problema relativo alla riscrittura dell'URL. Pertanto, ho ricevuto il modulo "URL Rewrite" installato su IIS e ho importato il file .htaccess per ottenere regole equivalenti di riscrittura degli URL da aggiungere nel file web.config, ma non ha funzionato neanche.

Nella sessione dell'applicazione viene salvato nel database. Non posso cambiarlo per essere salvato sul server (file) in quanto si tratta di un'applicazione esistente. Ma la sessione viene scritta e letta in/dal database con successo. L'unica cosa che indovina il motivo per cui la sessione scade nel reindirizzamento della pagina. Ma non sono sicuro di come sistemarlo.

Qualsiasi aiuto sarebbe molto apprezzato.

Modifica

cookie viene generato come illustrato di seguito enter image description here

mi manca in termini di configurazione di cookie/sessione in IIS? Qual è la configurazione ideale per sessione e cookie in php.ini quando si utilizza il server Web IIS?

+0

La vostra app lavorando sotto Apache su win? – venca

+0

Esecuzione con IIS 7 su Windows 7 – neeraj

+0

In che modo la tua applicazione è a conoscenza dello stato di un utente? Di solito si tratta di una sessione o di un cookie e penso che la tua nuova configurazione molto probabilmente non funzioni allo stesso modo. Quando sai come funziona quel processo, dovresti fare un po 'più di debug in quell'area. –

risposta

3

dopo il debug i riferimenti di origine e web, sono venuto a sapere che il problema reale era che i dati della sessione non veniva deserializzata dal motore PHP ed è per questo sessione non era stato costruito correttamente Pertanto, l'utente veniva reindirizzato alla pagina di accesso.

Quindi, la soluzione reale è fornito PHP: Custom Session Handler Unserialize Not Working on Windows

+1

Questo è interessante. Chi avrebbe mai pensato che un sospetto problema di configurazione di IIS sarebbe in realtà un effetto MicrosoftSQL :) –

+0

Sì Markus, ci sono voluti tre settimane per risolvere questo problema :) – neeraj

3

È il comportamento corretto per reindirizzare nuovamente la pagina di accesso quando il cookie non viene riconosciuto. Molto probabilmente c'è un problema durante l'emissione del cookie - errata configurazione del dominio/percorso del cookie (hai bisogno di url rewrite da IIS?)

Il primo passo per risolvere la causa principale è determinare se le intestazioni di login e di reindirizzamento sono presente e correttamente inviato fino al browser.

Si dovrebbe sniffare/catturare il traffico http per vedere le intestazioni finali (utilizzare l'estensione "Intestazioni HTTP Live" per chrome/firefox). Puoi anche inserire qui un campione delle intestazioni di richiesta/risposta per il corrispondente metodo di azione/post di login.

La sequenza deve contenere un'intestazione di risposta "Set-Cookie: PHPSESSID = .........". Prendi nota del valore del percorso/dominio del cookie. Oltre a intestazioni di reindirizzamento come "Posizione:/reindirizzamento/percorso".

Se tutto è configurato correttamente, tutte le richieste successive devono contenere l'intestazione della richiesta "Cookie: PHPSESSID = .....". Altrimenti è necessario rivedere la configurazione di IIS (riscrittura/inversione url per dominio/percorso per garantire che il cookie emesso corrisponda alle richieste future).

Per configurare IIS URL Rewrite/regole inversa, vedere http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-20-configuration-reference#Setting_Response_Headers

+0

Ho allegato lo screenshot dei cookie generati nel browser. Puoi fornire una configurazione ideale di php.ini per sessioni e cookie mentre usi IIS o c'è una configurazione del modulo necessaria in IIS itsef? – neeraj

+0

La colonna "dominio" dello screenshot allegato non può essere vista. Puoi espandere la colonna o scriverla? Inoltre, qual è l'URL completo che usi per colpire il server? –

+0

Sarebbe molto utile se potessi pubblicare le intestazioni HTTP complete catturate come consigliato sopra. In questo modo possiamo capire se il web server effettivamente autorizza la richiesta correttamente, o se il problema è il cookie stesso. C'è anche la possibilità che IIS sia configurato per autorizzare l'utilizzo del proprio meccanismo (se questo è il caso, è necessario configurare IIS per l'autorizzazione a livello di applicazione). Senza intestazioni di richiesta/risposta acquisite non è possibile indicare il problema esatto, in modo da non sapere quale soluzione applicare. –

Problemi correlati