Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    24

    Area riservata senza db

    Ciao a tutti, sto realizzando un'area riservata senza database, solo che sto avedo alcuni problemi, vi posto le pagine....

    Login.php:
    Codice PHP:
    <?php session_start(); 
    if(isset(
    $_POST['user'])){ 
    include(
    'utenti.php');
     
    $c count($utenti); $i 0; while($i $c && $utenti[$i]['nomeutente'] != $user && $utenti[$i]['password'] != $pass$i++; 
    if(
    $i $c) { $_SESSION['login'] = $utenti[$i]['id'];  
           
    // reindirizzo l'utente         
    header('Location: protetta.php');        
     exit;     }     
    // se non esiste da l'errore   
      
    else        
     die (
    'Nome Utente o Password errati');  } ?>
     <html> <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Login</title> </head> <body> 
    <form action="" method="post"> 
     <input name="user" type="text" id="user" value="Nome Utente" onFocus="if(this.value=='Nome Utente') this.value='';" />
      
    <input name="pass" type="password" id="pass" value="Password" onFocus="if(this.value=='Password') this.value='';" />

      <input name="login" type="submit" value="Login" />
     </form> </body>
     </html>
    poi la pagina dove deve prendere i dati(user, pass)
    Utenti.php:
    Codice PHP:
    <?php $utenti[]=array('id' => 1'nomeutente' => 'stefano''password' => 'io'); $utenti[]=array('id' => 2'nomeutente' => 'luca''password' => 'luca');   ?>

    e la pagina protetta...
    Protetta.php:
    Codice PHP:
    <?php session_start(); 
    fopen("utenti.php","a+"); 
     if(isset(
    $_SESSION['login']))
      echo 
    'Contenuto privato'
    else 
     echo 
    'Contenuto pubblico'?>
    I problemi sono questi:
    1.Una volta che inseriseco user e pass, mi dice sempre nome utente o pass errati e non mi fa entrare;
    2. quando sulla barra dell'URL metto l'indirizzo mi scavalca il controllo e apre quella con il contenuto privato e non pubblico come dovrebbe essere...

    Cosa devo fare? Chi mi può dare una mano??
    Spero in una vostra risposta...

    Stek78

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Il problema dovrebbe essere legato al fatto che, nel chiamare header('Location..., i dati di sessione non possono essere recuperati dal cookie nella nuova pagina. Per ovviare prova con

    codice:
    header('Location: protetta.php?'.SID);
    Il fatto che puntando direttamente la pagina ti compia la parte protetta è perchè comunque la sessione è stata aggiornata correttamente ma nell'immediato del redirect non è accessibile.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    24
    Ciao Grino,
    prima di tutto grazie x la risposta, allora ho provato ad inserire quel rigo di codice e niente, sia con i dati sbagliati che con i dati corretti ho l'errore....non so' più dove sbattere la testa ....!!!
    Per quanto riguarda la seconda parte del mio problema,l'indicizzazione della pagina protetta, non ho capito bene la tua risposta...(sinceramente sto un po' alle prime armi col php e mi sto facendo aiutare..)
    Grazie Stek78

  4. #4
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Originariamente inviato da Grino
    Il problema dovrebbe essere legato al fatto che, nel chiamare header('Location..., i dati di sessione non possono essere recuperati dal cookie nella nuova pagina. Per ovviare prova con
    Scusa ma perchè non dovrebbero poter essere recuperati dalla nuova pagina??

    comunque ho provato il codice ed è funzionante, l'unica cosa che ho tolto è

    fopen("utenti.php","a+");

    che non ho capito bene a cosa serve.

    Per il resto però funziona tutto, se inserisco user e pass sbagliate mi da il messaggio di errore, se le inserisco giuste vado alla pagina ptrotetta con contenuto privato. se cerco di accedere a protetta.php senza fare il log vedo la parte pubblica.

    Insomma mi sembra che funzioni tutto.


  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    24
    Ciao las,
    grazie x la risposta, ma tu hai provato lo script in locale?
    No, xkè io lo sto provando direttamente on-line e mi continua a non leggere i dati e quindi non so' ke fare....!
    Uff...Speriamo di trovare una soluzione!!
    Grazie Stek78

  6. #6
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    no lo sto provando su un server in remoto, ma non credo sia questo il problema ..... forse ho notato una casa interessante il nome del file "Utenti.php" ha la U maiuscola, ma nel codice è scritto tutto in minuscolo .... se il tuo server è linux Utenti.php e utenti.php sono 2 file diversi quindi non ti verrà incluso l'array.

    Prova a correggere il nome del file.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    24
    Ciao las,
    i nomi dei file sono tt in minuscolo ho sbagliato io a scriverli nel forum...

    Stek78

  8. #8
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Originariamente inviato da las
    Scusa ma perchè non dovrebbero poter essere recuperati dalla nuova pagina??
    http://php.net/manual/en/function.header.php
    Vedi l'ultima nota prima del "see also"

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    24
    Ciao Grino,
    ho provato anche come hai scritto tu recuperando i dati dal cookie con quella stringa di codice, ma non funziona...!!!
    Non va' e non va'...nn so' che fare!
    Grazie
    Stek78

  10. #10
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    index.php
    Il .SID forse non è necessario... vedi tu.
    codice:
    <?php
    session_start();
    if (isset($_POST['user'])) {
        include('utenti.php');
        foreach ($utenti as $utente) {
            if($utente['nomeutente'] == $_POST['user'] and $utente['password'] == $_POST['pass']){
                $_SESSION['login'] = $utente['id'];
                header('Location: protetta.php?'.session_name()."=".  htmlspecialchars(session_id()));
                exit;
            }
        }
        die('Nome Utente o Password errati');
    }
    ?>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Login</title>
        </head>
        <body>        
            <form action="" method="post">
                <input name="user" type="text" id="user" value="Nome Utente" onFocus="if(this.value=='Nome Utente') this.value='';" />
    
                <input name="pass" type="password" id="pass" value="Password" onFocus="if(this.value=='Password') this.value='';" />
    
                <input name="login" type="submit" value="Login" />
            </form>
        </body>
    </html>
    utenti.php
    codice:
    <?php
    $utenti[]=array('id' => 1, 'nomeutente' => 'stefano', 'password' => 'io');
    $utenti[]=array('id' => 2, 'nomeutente' => 'luca', 'password' => 'luca');
    ?>
    protetta.php
    codice:
    <?php
    session_start();
    
    if(isset($_SESSION['login']))
        echo 'Contenuto privato';
    else
        echo 'Contenuto pubblico';
    ?>
    Il codice l'ho provato ed è funzionante. Quando lo copi accertatit che non ci siano spazi o righe vuote (anche dei semplici invio) prima dei <?php e dopo ?>.
    Sono quasi certo che il tuo problema risieda nel fatto che hai i warning disabilitati e non vedi il messaggio di errore che ti vorrebbero segnalare la sessione_start o l'istruzione header. Queste istruzioni infatti non possono essere eseguite se è stato prodotto dell'output, e se in utenti.php hai delle righe vuote, al momento della include in index.php produci dell'aoutput (siano pure spazi o righe vuote non mostrate dal browser) che rende inutilizzabile la header e la successiva session_start nel file protetto.php.

    Quindi ripeto, rimuovi ogni riga vuota o spazio che precede <?PHP o segue ?> e vedrai che il codice postato funziona.

    Ciao!

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.