Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    problema protezione pagine

    Ciao a tutti!

    Sto sviluppando un sito web di dimensioni ridotte. L'ho strutturato in maniera che vi sia una pagina index che funge da template permettendo così di inserire i contenuti delle diverse pagine in un apposito div.

    Ho creato poi una pagina di login che verifica la corrispondenza di username e password sul database. Se vi è un riscontro positivo lo username viene salvato in sessione ed è proprio su questo valore che viene verificato il permesso d'accesso a determinate pagine.

    Ora, la mia domanda è: se creo la seguente funzione che verifica la presenza del valore "user" in sessione:

    Codice PHP:
        function verificaUtente(){
            if(!isset(
    $_SESSION["user"])){
                die(
    "Non hai i privilegi necessari per accedere a questa pagina!");
            }
        } 
    ogni qualvolta non mi viene trovato il valore user lo script termina lasciandomi incompleto il layout del sito.

    Esiste una valida alternativa a questa funzione di controllo? Oppure un sistema per ovviare al problema del layout non terminato?

    Grazie mille a tutti già da ora!

    Saluti

  2. #2
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    A monte di ogni pagina della quale devi controllare la sessione, hai avviato la sessione con session_start();?


  3. #3
    Originariamente inviato da Gab-81
    A monte di ogni pagina della quale devi controllare la sessione, hai avviato la sessione con session_start();?

    Si certo, ho ad esempio una pagina news nella quale vengono visualizzati i pulsanti per l'inserimento, la modifica e l'eliminazione di record soltanto quando si ha effettuato un login corretto. Purtroppo però se il login non è stato effettuato in maniera corretta allora subentra la funzione die() che termina l'esecuzione dello script portandosi via alcune parti di layout (tra cui il footer)..

    Probabilmente sono io che non ho capito bene come strutturare il tutto, ma sono davvero curioso di trovare la soluzione!

  4. #4
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    Ok, prova a postare del codice...sicuramente però dipende dal fatto che la porzione di codice postata in precedenza è posta all'inizio dello script. La funzione die() interrompe l'esecuzione dello script stesso...

    http://www.php.net/manual/it/function.die.php


  5. #5
    Originariamente inviato da Gab-81
    Ok, prova a postare del codice...sicuramente però dipende dal fatto che la porzione di codice postata in precedenza è posta all'inizio dello script. La funzione die() interrompe l'esecuzione dello script stesso...

    http://www.php.net/manual/it/function.die.php

    Ero in pausa pranzo di seguito ti posto il codice:

    Codice PHP:
    <form action="?page=gestNews" method="post">
    <p class="testo">
        <?php
            
    include("db.inc");
            
    //inserimento dei dati
            
    if(isset($_POST["bInserisciNews"])){
                
    $sql "insert into news values('', sysdate(), '"$_POST["tbTitolo"] ."', '"$_POST["taTesto"] ."')";
                
                
    $result $db->query($sql);
            }
            
            
    //visualizzazione dei dati
            
    $sql "select * from news order by data desc";
            
    $result $db->query($sql);
            
            print(
    "<table class=\"news\" border=\"1\">");
            while(
    $row $result->fetch_assoc()){
                if(isset(
    $_SESSION["user"])){
                print(
    "<tr><td rowspan=\"4\" width=\"20px\"><input type=\"radio\" value=\""$row["id_notizia"] ."\" " .
                      
    "name=\"rbNews\"></td></tr>");
                      }
                print(
    "<tr><td>[i]"$row["data"]. "[/i]</td></tr>" .
                      
    "<tr><td>[b]"$row["titolo"]. "[/b]</td></tr>" .
                      
    "<tr><td>"nl2br($row["testo"]). "<hr /></td></tr>");
            }
            print(
    "</table>");



                    
    //DA QUESTO PUNTO IN GIÙ SI DOVREBBE PERMETTERE LA VISUALIZZAZIONE
                    //DEI PULSANTI UNICAMENTE SE VI È IL VALORE "user" IN SESSIONE
            
    verificaUtente();
                print(
    "
    <input type=\"submit\" value=\"Inserisci\" name=\"bInserisci\">"
    );
                print(
    "<input type=\"submit\" value=\"Modifica\" name=\"bModifica\">");
                print(
    "<input type=\"submit\" value=\"Elimina\" name=\"bElimina\">");
            
    //}    
        
    ?>
    </p>
    </form>
    Nel caso in cui verificaUtente() non trova il valore "user" in sessione termina l'esecuzione con die() e quindi non esegue il codice che va a terminare il template contenuto in index.php (ad esempio il footer).

    Esiste un modo per ovviare a questo? non posso mettere il controllo della presenza di "user" a inizio pagina perchè la tabella dei commenti deve comunque essere visualizzata!

  6. #6
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    E' come ti dicevo: die termina lo script, quindi tutto quello che c'è dopo non viene interpretato . Puoi pensare di far ritornare un booleano a verificaUtente() e fare un controllo del tipo

    if(verificaUtente())
    faiQualcosa();
    else
    faiQualcosaltro();

    A me viene in mente questo...forse spicciola e poco elegante...


  7. #7
    Originariamente inviato da Gab-81
    E' come ti dicevo: die termina lo script, quindi tutto quello che c'è dopo non viene interpretato . Puoi pensare di far ritornare un booleano a verificaUtente() e fare un controllo del tipo

    if(verificaUtente())
    faiQualcosa();
    else
    faiQualcosaltro();

    A me viene in mente questo...forse spicciola e poco elegante...

    Al momento sto utilizzando un semplice:
    Codice PHP:
    if(isset($_SESSION["user"]) 
    Quindi pressapoco ci siamo ;D Ma se posso permettermi la domanda, tu personalmente come organizzi le aree riservate dei tuoi websites? Perchè ad ogni modo inserendo una funzione come quella che ho indicato ad inizio thread, non potrai mai ottenere la corretta conclusione del template.

    O meglio, è possibile includere un file contenente i tag di chiusura che sono stati aperti nel template, prima di inserire 'die()', ma a questo punto sei costretto ad utilizzare la tua funzione sempre nella stessa posizione all'interno delle pagine, o rischi che i tag di chiusura non si trovino nel giusto ordine..uhm..ho un po' di confusione in testa :master:

  8. #8
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    Sinceramente sono anche io alla ricerca di una soluzione ottimale...finora ho utilizzato dei window.alert di javascript, così che dopo aver notificato l'errore, attraverso un location.href indirizzo l'utente in un'apposita pagina a seconda dell'errore generato. Questo è il mio modo di procedere


  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Invece di "die()" fai un redirect con "header(location:...)" e lo rimandi a una pagina non protetta

  10. #10
    Originariamente inviato da Gab-81
    Sinceramente sono anche io alla ricerca di una soluzione ottimale...finora ho utilizzato dei window.alert di javascript, così che dopo aver notificato l'errore, attraverso un location.href indirizzo l'utente in un'apposita pagina a seconda dell'errore generato. Questo è il mio modo di procedere

    Hehe okay, se dovessi trovare una buona soluzione tienimi al corrente =) Ad ogni modo grazie!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.