Visualizzazione risultati 1 fino 9 di 9

Discussione: Problema con l'autenticazione HTTP di PHP su Apache

  1. #1
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito Problema con l'autenticazione HTTP di PHP su Apache

    Buonasera,

    avrei intenzione di creare una sezione privata tramite Autenticazione HTTP e più precisamente con l'Autenticazione HTTP che permette PHP quando si trova su server Apache.

    In rete e nel forum ci sono molti script...è vero...ma io devo imparare e quindi ho preso spunto da php.net però lo script non funziona come dovrebbe.

    Lo script che ho creato è:
    Codice PHP:
    <?php
    $user
    = "demo";
    $pass = "demo";

    if(!isset(
    $_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])){
    Header("WWW-Authenticate: Basic realm=\"Area Amministrativa\"");
    Header("HTTP/1.0 401 Unauthorized");
    exit;
    }elseif((
    $_SERVER['PHP_AUTH_USER'] != $user) && ($_SERVER['PHP_AUTH_PW'] != $pass)){
    Header("HTTP/1.0 401 Unauthorized");
    }
    ?>
    I problemi sono:
    • Se lascio le caselle "User" e "Password" vuote e premo OK mi visualizza pagina bianca.
    • Se premo "Annulla" visualizzo una pagina bianca.

    Ciò che vorrei è:
    • Se si lasciano le caselle vuote e/o si preme "Annulla" e/o si erra il login compaia una errore 401 (Utente non Autorizzato).
    • Se l'user e la password sono corretti non compie azioni

    Per il secondo punto intendo che se il login e la password sono giusti non fa niente perchè lo script verrà incluso...cioè ho:
    Codice PHP:
    <?php include("login.php"); ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="Content-Language" content="it" />

    <title>Area Amministrativa</title>

    </head>

    <body>

    AREA PROTETTA
    </body>

    </html>
    Includendo il login prima di tutto il codice HTML si svolgerà l'azione...e solo qual'ora l'user e la password siano corretti l'utente visualizzi il contenuto HTML.

    Datemi delle dritte perchè devo imparare...e non devo avere una cosa prefabbricata (almeno per ora che voglio approfondire PHP)
    Apprezzi l'aiuto? Offrimi un caffè!

  2. #2
    Guest

    Predefinito

    a mio parere c'è un errore di concetto...
    mi spiego: è normale che ti ritorni una pagina bianca, hai forzato l'uscita con exit, facendo così non mandi nessun output al browser (eccetto l'header)
    Probabilmente quello che hai confuso te è che forzare lo status 401 non porta alla classica pagina "Unauthorized" perchè gestita da Apache.

  3. #3
    Guest

    Predefinito

    Codice PHP:
    Header("HTTP/1.0 401 Unauthorized");
    exit;
    // <--- sbagliato.... si scrive exit()
    }elseif(($_SERVER['PHP_AUTH_USER'] != $user) && ($_SERVER['PHP_AUTH_PW'] != $pass)){
    Ciao! ^^
    Ultima modifica di sIM : 03-12-2008 alle ore 15.08.28

  4. #4
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Citazione Originalmente inviato da Inverno Visualizza messaggio
    a mio parere c'è un errore di concetto...
    mi spiego: è normale che ti ritorni una pagina bianca, hai forzato l'uscita con exit, facendo così non mandi nessun output al browser (eccetto l'header)
    Probabilmente quello che hai confuso te è che forzare lo status 401 non porta alla classica pagina "Unauthorized" perchè gestita da Apache.
    Ti potresti spiegare meglio?
    Ho provato a togliere exit o exit() pensando che fosse il problema ma non risolvo...la situazione non cambia.
    Io ho .htaccess che mi personalizza la pagina 401 quindi con o senza exit dovrebbe visualizzarmi la mia pagina mentre mi mostra una semplice schermata bianca...senza codice ne nulla...
    Citazione Originalmente inviato da sIM Visualizza messaggio
    Codice PHP:
    Header("HTTP/1.0 401 Unauthorized");
    exit;
    // <--- sbagliato.... si scrive exit()
    }elseif(($_SERVER['PHP_AUTH_USER'] != $user) && ($_SERVER['PHP_AUTH_PW'] != $pass)){
    Ciao! ^^
    Nulla, risultato non differente.


    Altre risposte?
    Apprezzi l'aiuto? Offrimi un caffè!

  5. #5
    Guest

    Predefinito

    - il problema non è l'exit in sè, cioè messo potrebbe essere giusto, ma non è quello che serve a te
    - lascia stare .htaccess quello è gestito da apache non dall'interprete php

    quello che ti sfugge è che per apache lo status è 302 (Found) e quindi non hai come output la tua pagina d'errore
    Ultima modifica di Inverno : 03-12-2008 alle ore 17.41.15

  6. #6
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Scusa è allora perchè se in un altro file (che esiste) metto:
    Codice PHP:
    <?php Header("HTTP/1.0 404 Not Found"); ?>
    Mi viene restituita la pagina di errore che ho personalizzato con .htaccess?
    Apprezzi l'aiuto? Offrimi un caffè!

  7. #7
    Guest

    Predefinito

    mi sono spiegato male (di nuovo)
    lo puoi fare certo, ma non è detto che in tutti i server funzioni. Diciamo che è una procedura sconsigliata...
    Con il tuo sistema, devi forzare lo status (come detto sopra):

    Codice:
    header("HTTP/1.1 401 Unauthorized");
    header("Status: 401 Unauthorized");
    Ultima modifica di Inverno : 04-12-2008 alle ore 09.50.36 Motivo: mistyping

  8. #8
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Si ho inserito anche header("Status: 401 Unauthorized"); (come spiegato su mrwebmaster.it) ma comunque non funziona...va beh non importa ho risolto in questo modo:

    Codice PHP:
    <?php
    $user
    = "demo";
    $pass = "demo";

    function
    Autentica(){
    include(
    "401.php");
    }

    if(empty(
    $_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_USER'] !== $user && $_SERVER['PHP_AUTH_PW'] !== $pass){
    Autentica();
    }

    ?>
    Apprezzi l'aiuto? Offrimi un caffè!

  9. #9
    Guest

    Predefinito

    a mio parere la soluzione migliore...
    almeno sei sicuro che funzioni sempre ;)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •