2011-02-08 13 views
6

Per qualche motivo non riesco a far funzionare l'autenticazione di base utilizzando PHP sul mio server. Sto usando il codice esatto dalla pagina di manuale:L'autenticazione di base con PHP fornisce un ciclo infinito

<?php 
if (!isset($_SERVER['PHP_AUTH_USER'])) { 
    header('WWW-Authenticate: Basic realm="My Realm"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo 'Text to send if user hits Cancel button'; 
    exit; 
} else { 
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; 
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"; 
} 
?> 

Tuttavia, quando l'eseguo, non riesco mai andare oltre il prompt.

Se inserisco lo stesso codice sul mio altro server, funziona correttamente.

Qualcuno sa che cosa potrebbe causare questo? Entrambi i server sono stack WAMP e Apache ha abilitato auth_basic_module. I file PHP.ini sono praticamente identici.

Ho dato un'occhiata alle intestazioni e dopo aver inserito il mio nome utente/password, è stata inviata l'intestazione "Autorizzazione: Basic XXXXXX".

+0

provare un 'diff' sui due file' php.ini', nel caso in cui manchi qualcosa. Potresti anche confrontare i conf di apache. – ocodo

+0

Riferimento: http://www.php.net/manual/en/features.http-auth.php –

risposta

9

Dipende dall'interfaccia PHP utilizzata. La variabile di ambiente PHP_AUTH_USER viene utilizzata solo per mod_php e se Apache ha aiutato.

Se si inizializza l'autorizzazione dallo script, è necessario cercare l'intestazione e decodificarla e dividerla autonomamente. Guarda questo commento: http://www.php.net/manual/en/features.http-auth.php#94349

Per le configurazioni FastCGI o invocazioni suexec potresti non avere nemmeno quell'intestazione presente nelle variabili di ambiente. È filtrato come precauzione di sicurezza. La soluzione comune è di riscrivere l'intestazione utilizzando una regola .htaccess:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

Così diventa disponibile con mixed-case come $_SERVER["HTTP_Authorization"].

+0

Segnalo come risposta perché è stato estremamente utile. Non so perché (forse lo fai), ma la variabile d'ambiente HTTP_AUTHORIZATION è stata rinominata REDIRECT_HTTP_AUTHORIZATION. Posso verificarlo, rinominarlo in HTTP_AUTHORIZATION e poi continuare con il codice come indicato nel commento del manuale php che hai postato. – Brandon0

+0

@ Brandon0: il prefisso 'REDIRECT_' è un'altra peculiarità della variante FastCGI di PHP. Ma non ho mai scoperto in quale circostanza lo fa e quali impostazioni di configurazione lo attivano. – mario

+0

@ Brandon0 Sto riscontrando lo stesso problema ma non sono riuscito a capire quale sia la correzione che hai implementato per risolverlo. Puoi condividere le modifiche che hai apportato nel codice? – DMEM

Problemi correlati