Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Sessioni utenti

  1. #1

    Sessioni utenti

    Ciao a tutti,
    ho un sito web che prevede che l'utente dopo aver fatto il login correttamente acceda ad una sua schermata dalla quale possa gestire le interazioni con gli altri utenti e modificare le proprie informazioni. Il problema è che le pagine riservate per ciascun utente sono più di una e ciascuna deve cambiare alcuni dati a seconda dell'utente connesso. Penso di dover usare le sessioni, ma non so come fare; ho provato a seguire la guida, ma non ci ho capito molto...

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Nella pagina dove fai il login, una volta accertata l'identità metti in sessione l'id dell'utente (e se ti servono altri campi )
    Poi, nelle pagine riservate, controlli se in sessione c'è l'id. con quello effettui una query sul db, per riprendere i dati di quell'utente.

    es:

    login.php
    Codice PHP:
    session_start();
    $pass $_POST['password'];
    $user $_POST['username'];

    mysql_connect(...);
    $query "SELECT * FROM users WHERE username='$user' AND password='$pass' ";
    $res mysql_query($query);
    if(
    mysql_num_rows($res) > 0){
        
    $user mysql_fetch_assoc($res);
        
    $_SESSION['User'] = array("id"=>$user['id'], 'username'=>$user['username']);
        
    // Redirect alla pagina del'utente
    }
    // Gestione login Errata 
    pagina utente:

    Codice PHP:

    session_start
    ();
    if(!isset(
    $_SESSION['User'])){
        
    // Gestione accesso non consentito
    }

    $query_dati_utente "SELECT * FROM users WHERE id ="$_SESSION['User']['id'];

    // Usa i dati dell'utente per personalizzare la pagina 
    Due cose:
    1. Utilizza per l'accesso al db PDO. Io ho messo il classico, ma deprecato, mysql_connect perchè è più rapido da scrivere
    2. Per la gestione del login potresti crearti una classe ad hoc.

  3. #3
    Nel mio file php di login ci devo quindi inserire solo
    $_SESSION['user']=...
    Ma in questa sessione ch cosa carica? Solo l'id o l'username?
    Una volta verificato che la sessione è attiva, come faccio a ricevere i dati nella pagina personalizzata?

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    In sessione puoi mettere tutti i dati che vuoi, come minimo metti l'id dell'utente.

    Poi grazie a questo id, che leggi nella pagine riservate, puoi ritrovare nel db tutti i dati relativi a quel'utente e creare quindi la pagina stessa

  5. #5
    Ok, come faccio a leggere l'id nelle pagine?

  6. #6
    Così l'inizializzazione della sessione al login può andare?

    Codice PHP:
    <?php
        session_start
    ();
        require_once(
    'mysqlconnect.php');
        
    mysql_select_db($database$users);
        
    $bSuccesso true;
        
    $verDB false;
        
    $id htmlspecialchars($_POST['username']);
        
    $password htmlspecialchars($_POST['password']);
        if (
    strlen($id) <= 0)
            
    $bSuccesso false;
        if (
    strlen($password) <= 0)
            
    $bSuccesso false;
        
        
    $sql "SELECT * FROM users WHERE username='".$id."'";
        
    $resource mysql_query($sql$users);
        while (
    $row mysql_fetch_assoc($resource)) {
            if (
    $row['password'] == $password) {
                
    $verDB true;
            }
        }
    ?>

    <html>
    <head><title>Login</title>
    <?php
    if ($bSuccesso && $verDB) {
        
    // avvio sessione utente
            
    $_SESSION['utente']= array("username"=>$id['id']);
        
    // fine avvio sessione utente

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    La vedo un po' contorta...
    Io sistemerei così
    login.php
    Codice PHP:
    <?php
    session_start
    ();
    require_once(
    'mysqlconnect.php');
       
    if(
    $_SERVER['REQUEST_METHOD'] == "POST"){
         
    mysql_select_db($database$users);
      
         
    // Occhio se hai magic_quotes attivo, mysql_real_escape_string potrebbe farti un doppio escape
         
    $id mysql_real_escape_string($_POST['username']);
         
    $password mysql_real_escape_string($_POST['password']);
         
    // Devi controllare se l'utente inserisce lo username e password giuste, non solo lo username
         
    $sql "SELECT * FROM users WHERE username='$id' AND password='$password'";
     
         
    $resource mysql_query($sql$users);
         if(
    mysql_num_rows($resource) > 0){
            
    // Il Dbms ha trovato una corrisponenza nel db, quindi il login è ok
            
    $row mysql_fetch_assoc($resource);
            
    // Salvo i dati in sessione
            
    $_SESSION['utente'] = array("id"=>$row['id'], 'username'=>$row['username']);
            
    // Rimando l'utente nella pagina di benvenuto dell'utente, o dove vuoi
            
    header("Location: home_user.php");
         }else{
            
    $message "Username & password errate!";
         }
    }
    ?>

    <html>
    <head><title>Login</title>
    <?php
       
    if($message) echo $message
    ?>

    <form method="POST">
        <input> ...
    </form>
    ...
    Poi nelle pagine dove è richiesto il login basta che controlli se nella sessione è settato $_SESSION['utente']

    PS: Resta valido il consiglio di passare a PDO, che è più sicuro

  8. #8
    Non c'è un modo di impostare l'avvio della sessione senza modificare la parte del controllo dati d'accesso che ho fatto io? Te lo chiedo perché il mio sistema l'ho capito mentre quello da te proposto no.
    Preferirei quindi mantenere il mio sistema ed introdurre solo l'avvio di sessione. I dati che mi serve passare sono solo l'id perché essendo univoco non ho rischi di futuri errori.

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.