Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    28

    Cookie & header("Location: ...

    Ciao a tutti.

    Da qualche giorno, programmando un semplice script di login ho incontrato alcune difficolta che proprio non riesco a superare.
    Vi posto i punti salienti del codice... magari qualcuno di voi mi può aiutare.

    Dunque... la pagina "config.php" fa sostanzialmente questo:
    Codice PHP:
    //[...]
    setcookie("autenticazione","1",time()+60);
    setcookie("ricorda","1",time()+60);
    setcookie("pwd",sha1($_POST['pwd']),time()+60);
    //$_POST['pwd'] è il contenuto di un campo di testo passato dalla pagina config.php a se stessa
    //[...] 
    I cookie vengono creati correttamente.
    A questo punto utilizzando la pagina "login.php" do la possibilità all'utente di inserire la password per accedere ai servizi del sito:

    Codice PHP:
    //[...]
    //$_POST['pwd'] è il contenuto di un campo di testo passato dalla pagina login.php a se stessa
    if( isset($_POST['pwd']) )
    {
         if( 
    $_COOKIE['pwd'] == sha1($_POST['pwd']) )
         {
              
    //redirect a main.php
              
    header("Location: $redirect_Window");
              exit();
         }
         else
              
    //Comunico che la password inserita è errata
    }
    //[...] 
    Anche in questo caso il codice funziona bene: l'utente inserisce la password. La pagina viene ricaricata. Vengono eseguite le istruzioni all'interno del primo "if". Se il controllo della password inserita dall'utente corrisponde con quella nel cookie si viene reindirizzati alla pagina "main.php".

    in "main.php":
    Codice PHP:
    //[...]
    if( empty($_COOKIE) )
         echo 
    "Errore: Il sito non è stato configurato.";
    else
    {
         
    //[...]
    }
    //[...] 
    Quando viene caricata la pagina "main.php" viene sempre visualizzato il messaggio di errore.
    I cookie, infatti, sembrano essere stati cancellati.

    Girando su internet ho trovato informazioni relative alla funzione header la quale, a quanto sembra, crea un cookie exnovo cancellando il mio.
    Tuttavia questa versione non mi convince molto: se così fosse, infatti, il cookie creato dalla funzione header dovrebbe esistere... e quindi il controllo "if ( empty($_COOKIE) )" non dovrebbe fallire.

    Voi sapete dirmi, percaso, se c'è un modo di caricare automaticamente la pagina "main.php" preservando l'integrità dei miei cookie?
    Eventualmente mi sapreste consigliare un'alternativa che potrei utilizzare?
    Teo

  2. #2
    setcookie("autenticazione","1",time()+60); è come dire "Crea un cookie di nome autenticazione e accoppalo dopo 60 secondi".


  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    28
    Si, lo so. Ho copiato, per sbaglio il codice che avevo usato per la fase di testing (l'unico che avevo momentaneamente a disposizione).
    Nella versione definitva, ovviamente, la durata è molto maggiore.

    Posso assicurare, comunque, che il problema si ripropone anche modificando quel valore.
    Teo

  4. #4
    Io pure un poco ci ho bestemmiato con i cookies, prova ad usare var_dump($_COOKIES) per vedere cosa c'è di volta in volta

  5. #5
    Così a botto direi che il problema è il percorso o il dominio.

    Non so come è strutturato il tuo sito ma innanzitutto assicurati che il redirect sia all'interno dello stesso dominio. Presupponendo che ciò sia vero, forse 'login.php' e 'main.php' non sono nella stessa directory: se ciò è il caso, forza i cookies nella directory radice in modo che siano visibili dall'intero dominio.

    Codice PHP:
    setcookie("autenticazione","1",time()+60'/');
    setcookie("ricorda","1",time()+60'/');
    setcookie("pwd",sha1($_POST['pwd']),time()+60'/'); 

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    28
    ...Innanzitutto grazie per il tempo che mi avete dedicato...

    Ho provato entrambe le soluzioni che mi avete proposto. Purtroppo, però, la situazione non è cambiata e il problema persiste.
    Ovvero:
    Fintanto che non viene premuto il tasto "submit" nella pagina della login, i cookie esistono e contengono i valori corretti.
    Nel momento in cui clicco sul pulsante "Login"... la pagina login.php viene ricaricata. I cookie ci sono ancora e, dopo aver effettuato i vari controlli, la pagina viene reindirizzata a main.php.
    E, come dice il caro buon vecchio Max Pezzali "Tutto va come deve andare"!
    Ma nel momento in cui accedo a main.php il cookie con i tutti i valori in esso contenuti sono scomparsi.

    :master:
    Teo

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Fai il redirect con url assoluto, non relativo

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    28
    Ammetto di non ricordare bene la differenza tra i due...
    Se non sbaglio il relativo indica solo il nome della pagina.
    L'assoluto, al contrario, specifica anche protocollo, directory ecc ecc..

    Se è così, comunque, la variabile $redirectWindow contiene già un URL assoluto.

    Teo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.