Visualizzazione risultati 1 fino 7 di 7

Discussione: Problema con Script di log-in

  1. #1
    Guest

    Exclamation Problema con Script di log-in

    Ragazzi, non so se è il posto giusto per fare domande, ma ho un dilemma che non riesco a risolvere:
    sto cercando di creare un sito per la mia classe (http://iih.altervista.org se volete vedere username: test e password: test) e fin qua tutto ok. Poi, oggi, metto che io ed il mio amico che lo stiamo creando, quando facciamo il login, ci avvii la sessione admin e mi è andato tutto bene, anche quando mettevo le mie credenziali, mi lasciava andare anche nelle pagine ancora in fase di sviluppo (perché avevo messo
    Codice PHP:
    <?php
    session_start
    ();
    if(empty(
    $_SESSION['admin'])){
    header('location: /accessdenied.html');

    exit;
    }

    //altri comandi che non servono

    ?>
    e andava).

    Sta sera, per qualche "misteriosa forza arcana" ho pasticciato un po' per aggiungere il fatto che nella homepage di diceva "Benvenuto <nome completo dell'utente>..." e così ora mi si è buggato e quando faccio il login con il mio account admin mi reindirizza alla pagina di login con qualsiasi pagina io apra, tranne quelle che sono SOLO accessibili ad administrator (anche con gli altri account admin lo fa).

    Ho provato ad aggiungere quando registravo il $_SESSION dell'admin anche quello utente, ma così non mi fa più accedere alle aree riservate!!!

    Codice PHP:
    <?php
    $db
    = mysql_connect("localhost", "*****", "*****") or die ('Errore durante la connessione');
    mysql_select_db("*****", $db) or die ('Errore durante la selezione del db');

    $user = $_POST['username'];
    $pass = $_POST['password'];
    $login = $_GET['login'];

    if (
    $user && $pass ) {

    $user = mysql_real_escape_string($user);
    $pass = mysql_real_escape_string($pass);
    $sql = "SELECT * FROM *****.membri WHERE uname = '$user' AND pword = '$pass';";
    $result = mysql_query($sql);
    $row = mysql_fetch_array($result);
    $count = mysql_num_rows($result);
    $adminsql = "SELECT * FROM *****.admin WHERE uname = '$user' AND pword = '$pass';";
    $adminresult = mysql_query($adminsql);
    $adminrow = mysql_fetch_array($adminresult);
    $admincount = mysql_num_rows($adminresult);
    $fnquery = mysql_query("SELECT fullname FROM *****.membri WHERE uname='$user' AND pword='$pass';", $db);
    while (
    $fnrow = mysql_fetch_array($fnquery, MYSQL_ASSOC) ) {
    $fn = $fnrow['fullname'];
    }

    if(
    $admincount==1){
    session_register("admin");
    $_SESSION['admin']=$user;
    $_SESSION['utente']=$user;
    $_SESSION['name']=$fn;

    header("location: homepage.php");
    }else if(
    $count==1)
    {
    session_register("utente");
    $_SESSION['utente']=$user;
    $_SESSION['name']=$fn;

    header("location: homepage.php");
    }else
    {
    header("location: error1.php");
    }
    }else
    {
    header("location: error2.php");
    }
    ?>
    anche se c'è qualche imprecisione o possibile miglioramento da fare, ditemelo per favore.

    P.S.: non datemi codici prefatti, per favore, o almeno spiegateli!
    P.S.P.S.: scusate per la lunghezza!!!

    Ah, ancora! Ho già provato a togliere le parti che avevo aggiunto... niente...
    Ultima modifica di IIH : 24-05-2014 alle ore 23.45.25

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Prima di mettermi a guardare tutto il codice, noto che nello script manca la session_start().
    Prova ad aggiungerla all'inizio del codice.

    Ciao!

  3. #3
    Guest

    Predefinito

    niente alemoppo, ho provato ad aggiungere (probabilmente l'avevo cancellato per sbaglio mentre pasticciavo), ma continua a farmi come ho descritto prima... posto anche il codice che uso per il controllo delle sessioni, magari sbaglio li... guardandolo ora, a me, sembra tutto giusto, solo che sono un po' stordito che sono in convalescenza da una brutta influenza xD

    Codice PHP:
    <?php
    //codice che uso per il controllo sessioni nelle pagine a cui hanno accesso sia i membri sia gli admin
    session_start();
    if(empty(
    $_SESSION['utente']) || empty($_SESSION['admin'])){
    header('location: index.php');
    exit;
    }

    //altri codici...

    ?>
    Stavo pensando anche che magari poteva essere proprio un bug e di provare a rifare da capo lo script del login, ma aspetterei se magari c'è un errore di cui non mi ero accorto....

    grazie in anticipo.

    P.S.: Sembra quasi mi ignori il empty($_SESSION['admin']) se c'è quello dell'utente O.o
    Ultima modifica di IIH : 25-05-2014 alle ore 08.44.40

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Nei tuoi non ci sono particolari errori. È normale che ti ignori il controllo di $_SESSION['admin'] (spiegato alla fine).
    Comunque, io li farei circa così (nota le differenze, e se non capisci qualcosa chiedi pure):
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    session_start();
    $db = mysql_connect("localhost", "*****", "*****") or die ('Errore durante la connessione');
    mysql_select_db("*****", $db) or die ('Errore durante la selezione del db');

    if (isset(
    $_POST['username'], $_POST['password'])) {

    $user = mysql_real_escape_string($_POST['username']);
    $pass = mysql_real_escape_string($_POST['password']);
    $sql = "SELECT * FROM membri WHERE uname = '$user' AND pword = '$pass' LIMIT 1;";
    $result = mysql_query($sql);
    $row = mysql_fetch_array($result);
    $count = mysql_num_rows($result);
    $adminsql = "SELECT * FROM admin WHERE uname = '$user' AND pword = '$pass' LIMIT 1;";
    $adminresult = mysql_query($adminsql);
    $admincount = mysql_num_rows($adminresult);

    if(
    $admincount==1){
    $_SESSION['admin']=$user;
    $_SESSION['utente']=$user;
    $_SESSION['name']=$row['fullname'];

    header("location: homepage.php");
    }else if(
    $count==1)
    {
    $_SESSION['utente']=$user;
    $_SESSION['name']=$row['fullname'];

    if(isset(
    $_SESSION['admin']))
    unset(
    $_SESSION['admin']);

    header("location: homepage.php");
    }else
    {
    header("location: error1.php");
    }
    }else
    {
    header("location: error2.php");
    }
    ?>
    Codice PHP:
    <?php
    //codice che uso per il controllo sessioni nelle pagine a cui hanno accesso sia i membri sia gli admin
    error_reporting(E_ALL);
    session_start();
    if(isset(
    $_SESSION['utente'])){
    header('location: index.php');
    exit;
    }

    //altri codici...

    ?>
    Nella condizione dell'esistenza di
    $_SESSION['utente'] || $_SESSION['admin']
    , il controllo di $_SESSION['admin'] è inutile perché se esiste, esisterà sicuramente anche $_SESSION['utente'].

    Ciao!
    Ultima modifica di alemoppo : 25-05-2014 alle ore 12.08.05

  5. #5
    Guest

    Predefinito

    Ok, funziona, grazie mille :D!

    Avevo provato a fare una cosa simile, solo che avevo scritto male nell'ifa l'assegnazione alle $_SESSION xDDD.

    Comunque, perché non metti il session_register();?

    P.S.: Solo una cosa ancora, alemoppo: ma te, il WebMaster lo fai di professione o per hobby? Sentiti libero di non rispondere, è solo una mia curiosità xDD.
    Ultima modifica di IIH : 25-05-2014 alle ore 12.21.42

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Citazione Originalmente inviato da IIH Visualizza messaggio
    Comunque, perché non metti il session_register();?
    Perché, citando la documentazione ufficiale,
    Warning
    This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.
    Inoltre:
    Caution
    If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().
    Ciao!

  7. #7
    Guest

    Predefinito

    xDDD
    Dovrei cominciare a visitare più spesso il sito ufficiale PHP, altrimenti mi succede come ora :P

Tags for this Thread

Regole di scrittura

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