Visualizzazione risultati 1 fino 7 di 7
Like Tree1Likes
  • 1 Post By darbula

Discussione: come visualizzare nome utente loggato

  1. #1
    bcprojects non è connesso Utente AlterBlog
    Data registrazione
    21-09-2017
    Messaggi
    46

    Predefinito come visualizzare nome utente loggato

    Ciao a tutti, premettendo che ho iniziato da poco a smanettare con i sistemi php,mysql quindi vi prego di perdonare la mia grande ignoranza in materia.. sto cercando di fare una sorta di pannello di amministrazione per un sitoweb e nella pagina a cui vengo reindirizzato dopo il login vorrei visualizzare un messaggio del tipo "Benvenuto nome_utente" ma non riesco a stampare a video il nome, ho fatto svariati tentativi ma succede che o non stampa nulla o stampa il numero ID utente. La tabella è composta dai campi id, user, pass. La stampa a video funziona se eseguita nella stessa pagina dove avviene l'autenticazione (login.php) in questo modo:

    Codice PHP:
    <?php



    include('connect_db.php');

    $connection= mysql_connect($server, $user, $pass);
    mysql_select_db('my_bcprojects');


    //variabili POST con anti sql Injection
    $username=mysql_real_escape_string($_POST['username']); //faccio l'escape dei caratteri dannosi
    $password=mysql_real_escape_string(sha1($_POST['password'])); //sha1 cifra la password anche qui in questo modo corrisponde con quella del db

    $query = "SELECT * FROM panelusers WHERE user = '$username' AND pass = '$password' ";
    $ris = mysql_query($query, $connection) or die (mysql_error());


    if (!
    $ris) {
    die(
    "Errore nella query $query: " . mysql_error());
    }

    $record = mysql_fetch_array($ris);

    if(!
    $record) {
    echo
    "Username/Password non validi!
    "
    ;
    } else {
    session_start();
    $_SESSION['user_id'] = $record['id'];


    echo
    "
    "
    . $record['user']." autenticato. Caricamento...
    <meta http-equiv='refresh' content='4;URL=home.php'>"
    ;
    }

    ?>
    $record['user'] mi stampa a video il campo user della tabella correttamente. Questo però non succede nella pagina dove avviene il redirect (home.php), dove al massimo mi appare il numero id. In pratica dovrei importare e "scompattare" nelle altre pagine le informazioni salvate nella sessione.. come posso fare??

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Dalla codice che hai postato, vedo solo una sessione creata, ovvero:
    Codice:
    $_SESSION['user_id'] = $record['id'];
    Contenente solo l'id utente, evidentemente nella home te usi quella. Sicuro che il codice lo hai scritto te? No perché dato la tua domanda non sembra.

    In ogni caso, dovresti creare, una sessione, come questa qui sopra ma che: invece di memorizzare l'id utente memorizzi il campo user, contenente il nome utente.

    Oppure fai come me, io in questi giorni sto trasformando il mio sito in un sito-community e memorizza un'unica sessione contenente un'array con tutti i dati utenti:
    Codice:
    $_SESSION[sessionLogin]
    = array(id-user, username)
    In modo da avere un'unica sessione dove memorizzare piú informazioni per recuperarle cosi:
    Codice:
    $_SESSION[sessionLogin][0] // Recupero il primo elemento, l'id utente
    $_SESSION[sessionLogin][1] // Recupero il secondo elemento, il nome utente
    P.S.: In ogni caso se vuoi proseguire in quello che stai facendo ti consiglio di studiarti meglio i vari l'inguaggi

  3. #3
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Oltre alle indicazioni di sevenjeak aggiungo:
    • Le funzioni mysql_* sono deprecate e andrebbero sostituite con MySQLi o PDO
    • per la sicurezza della password non dovresti usare sha1 o altre funzioni di hash, bensì le API native di PHP: password_hash, password_verify
    • Il controllo if (!$ris) { ... } è ridondante avendo usato or die(...) nell'istruzione precedente

  4. #4
    bcprojects non è connesso Utente AlterBlog
    Data registrazione
    21-09-2017
    Messaggi
    46

    Predefinito

    Grazie per le risposte.

    per il codice ho preso spunto da tutorial e pagine gia fatte.. come ho detto sono alle prime armi con il php e quindi non ancora in grado di realizzare sistemi php scrivendo il codice da zero... ad ogni modo ci sono riuscito con il metodo suggerito da sevenjeak. avevo gia provato prima in questo modo ma probabilmente sbagliavo impostazione...

    in merito a quanto detto da mzanella, vi sarei molto grato se potesse farmi vedere come si fa a rendere piu aggiornato e sicuro questo script di login. grazie

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    in merito a quanto detto da mzanella, vi sarei molto grato se potesse farmi vedere come si fa a rendere piu aggiornato e sicuro questo script di login. grazie
    Per quanto riguarda l'uso di MySQLi o PDO, basta scegliere uno dei due. Se hai già qualche esperienza con un qualunque altro linguaggio di programmazione orientato agli oggetti ti suggerisco PDO , altrimenti MySQLi nella sua "versione" procedurale, che è quasi identica al vecchio MySQL che stai utilizzando. Trovi un esempio nella documentazione, alla "sezione" Stile procedurale. Se hai bisogno di una guida c'è quella del manuale, oppure una guida introduttiva qualunque: MySQLi Procedural Functions, MySQLi for beginners (quest'ultima riguarda la "versione" ad oggetti).

    Per la cifratura delle password, devi modificare lo script per la registrazione usando password_hash, ad esempio:
    Codice PHP:
    ...
    $hashed_password = password_hash($_POST['password'], PASSWORD_DEFAULT);
    ...
    $query = "INSERT INTO panelusers (..., pass, ...) VALUES(..., $hashed_password, ...)";
    ...
    Quindi usare password_verify nello script di connessione:
    Codice PHP:
    $link = mysqli_connect(...);
    ...
    $query = "SELECT * FROM panelusers WHERE user = '$username'";
    $result = mysqli_query($link, $query) or die(...);
    $user = mysqli_fetch_assoc($result);

    if (
    $user === false) {
    echo
    "Nessun utente con il nome utente indicato";
    // Viene gestito l'errore...
    }

    if (
    password_verify($_POST['password'], $user['pass'])) {
    echo
    "Password corretta";
    // Si procede al login...
    }
    else {
    echo
    "Password errata";
    // Viene gestito l'errore
    }
    Attenzione che cambiando il meccanismo con cui verifichi le password, quelle già memorizzate "non funzioneranno più", bisognerà inserirle da 0. Attenzione anche al tipo della colonna che usi nella base di dati, deve essere abbastanza grande per contenere la stringa di hash: CHAR(256) dovrebbe andare bene.

    Ti suggerisco di intervenire sulle questioni passare da mysql a mysqli/PDO e cifratura delle password separatamente: sistema prima una cosa, poi l'altra, nell'ordine che preferisci.

    Se hai bisogno di altro non farti scrupoli a chiedere .

  6. #6
    bcprojects non è connesso Utente AlterBlog
    Data registrazione
    21-09-2017
    Messaggi
    46

    Predefinito

    ti ringrazio! ma in questo modo si risolve anche il fatto che il browser segnala le mie pagine agli utenti come una "connessione non protetta" ?

  7. #7
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    No... Per favore mantieniti con l'oggetto del post o altrimenti apri una nuova discussione.
    Il tuo browser vede <a href="http://www.example.com">
    </a> o chiamate al css/javascript ecc..che non inizia per https è lo segnala ... Come risolvere? Tutto dipende dal contesto (prendi per le pinze ciò che ti sto per dire, cioè leggi e rifletti come effetto secondario ti impegnerai nel creare una tua logica sul mio discorso "meglio il cervello accesso che un copia/incolla sconosciuto"), cioè se hai attivo https e i link puntano al tuo sito allora devi cambiare da http in https (non credo che i banner di altervista supportano https ma potrei sbagliarmi)..
    Ultima modifica di darbula : 24-09-2017 alle ore 02.30.30
    mzanella likes this.

Regole di scrittura

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