• User

    Problema: PHP-login multiutente

    Buongiorno a tutti,
    ho un problema con questo codice PHP, riesco ad effettuare il login con utenti diversi, ognuno in una pagina diversa...
    Non riesco ad inserire un utente di nome ADMIN che solo lui può entrare in tutte le pagine di tutti gli altri utenti.
    Grazie anticipatamente per l'aiuto...;)
    Ecco i file creati da me...

    Vi posto i files che uso:

    1. "login.php"[INDENT][php]<?
      if (isset($_cookie[session_name()])) setcookie(session_name(), '', time() - 90000);
      ?>
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <title>Login</title>

    </head>

    <body>
    <?
    function check($user,$password){
    include("_private/utenti.php");

    foreach($utenti as $user_ => $password_){
    if (($user==$user_) AND ($password==$password_)) {
    return true;
    }
    }

    return false;
    }

    function form_login(){
    ?>
    <form id="login" action="<?=$PHP_SELF?>" method="post">
    <div style="text-align:center;margin-left:auto;margin-right:auto;">NON RISULTI LOGGATO!!!
    <br />
    Utente:<br>
    <input type="text" name="utente" size="20" maxlength="255"><br>
    Password:<br>
    <input type="password" name="password" size="20" maxlength="255"><br><br>
    <input type="submit" value=" OK ">
    </div>
    </form>
    <?
    echo "<br>\n"; #creo una nuova linea
    echo "L'ID di sessione è: ";
    echo session_id(); #visualizza l'id di sessione
    echo "<br>\n";
    ?>
    <? }

    if(isset($_POST["utente"])){
    if (check($_POST["utente"],$_POST["password"])){
    session_start();
    $_SESSION["utente"] = $_POST["utente"];
    $_SESSION["password"] = $_POST["password"];
    if($_POST["utente"] == "pippo"){include("_private/pippo.php");}
    if($_POST["utente"] == "pepo"){include("_private/pepo.php");}
    }else{
    form_login();
    }
    }else{
    form_login();
    }
    ?>

    </body>
    </html>[/php][/INDENT]2) "logout.php"[INDENT][php]<?
    // Unset dell'array $_SESSION
    $_SESSION = array();
    // Elimina il cookie del sessionID
    if (isset($_COOKIE[session_name()])) setcookie(session_name(), '', time() - 86400);
    // Distruggi i dati di sessione
    session_destroy();
    header("Location: login.php");
    ?>[/php][/INDENT]3) "pepo.php"[INDENT][php]<?
    session_start();
    if (!isset($_SESSION['utente']) && !isset($_SESSION['passwd'])){
    include("login.php");
    die();
    }
    if ($_SESSION["utente"] != "pepo") {
    include("login.php");
    die();
    }
    ?>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Documento senza titolo</title>
    </head>

    <body>
    <p>Ciao pepo,questa è la pagina "pepo.php"
    <a href="logout.php">LOGOUT </a></p>
    <?
    echo "<br>\n"; una nuova linea
    echo "L'ID di sessione è: ";
    echo session_id(); l'id di sessione
    echo "<br>\n";
    ?>
    </body>
    </html>[/php][/INDENT]4) "utenti.php"[INDENT][php]<?
    /*
    Per aggiungere un nuovo utente scrivere:
    $utenti["nome_utente"] = "password";
    Ad esempio, se si vuole aggiungere l'utente mario con password rossi, scrivere:
    $utenti["mario"] = "rossi";
    */

    $utenti["pippo"] = "pippo";
    $utenti["pepo"] = "pepo";
    ?>[/php][/INDENT]


  • User Attivo

    Vorresti aggiungere un utente ADMIN che entri pippo.php e pepo.php?

    Aggiungi ad $utente un utente ADMIN e nell'if dove controlli l'utente aggiungi anche un OR per l'utente ADMIN. Grosso modo dovresti fare così.


  • User

    Ciao Linoma,
    ti ringrazio anticipatamente per la collaborazione, ma ti chiedo la cortesia di aiutarmi a modificare la parte del controllo utente...


  • User Attivo

    Prima di tutto aggiungi in utenti.php
    [php]
    $utenti["admin"] = "admin";
    [/php]

    Poi devi modficare anche i vari if che controllano, tranne il foreach.
    Il session_start lo metterei sempre ad inizio pagina.


  • User

    OK, fatto...mentre per i vari if...??


  • User Attivo

    Prova con qualcosa di simile

    [php]
    if($_POST["utente"] == "pippo" || $_POST["utente"] == "admin") {include("_private/pippo.php");}
    [/php]

    etc etc.


  • User

    Ciao Linoma,
    non funziona...
    a me serve un login in PHP con queste funzioni:

    • deve avere una sola pagina di login.php
    • deve avere un logout.php per poter chiudere la sessione aperta
    • utente Pippo può entrare solo nella sua pagina pippo.php
    • utente Pepo può entrare solo nella sua pagina pepo.php
    • l'Admin entra in una prima pagina Admin_panel.php dove ci sono i due link (pagina di pippo.php e pepo.php) e poter entrare senza nessun vincolo.
    • una volta che l'utente admin entra in admin_panel.php e poi entra a sua volta nella pagina di pippo.php deve poter ritornare nalla pagina di admin_panel.php

    Quindi ti chiedo di aiutarmi a creare un qualcosa del genere...

    In attesa di un riscontro,
    ti ringrazio anticipatamente per la collaborazione,
    saluti,
    HELL-WEB


  • User Attivo

    Crea un nuova pagina admin_panel.php dove includi le tue pagine.
    Hai il valore di sessione e controlli quello. Se l'utente di sessione è admin ha libero accesso alle pagine. Non pretenderai che mi metta a scrivere tutto il codice qui su un forum?


  • User

    Ciao Linoma, ho quasi risolto il problema, solo alcune cose non mi sono chiare...
    Questa parte non funziona:

    [php]<?php
    $login_admin = "_private/admin_panel.php";
    $login_pippo = "_private/pippo.php";
    $login_pepo = "_private/pepo.php";

    function nome_utente(){
    if($_SESSION["utente"] == "admin"){
    echo "Amministratore";
    header("Location: $login_admin");
    }
    if($_SESSION["utente"] == "salvatore"){
    echo "Casola Salvatore";
    header("Location: $login_admin");
    }
    if($_SESSION["utente"] == "pippo"){
    echo "D'Esposito Pippo";
    header("Location: $login_pippo");
    }
    if($_SESSION["utente"] == "pepo"){
    echo "Russo Pepo";
    header("Location: $login_pepo");
    }else{
    echo "VUOTO";
    }
    }

    session_start();
    if (isset($_COOKIE[session_name()]))
    setcookie(session_name(), '', time() - 90000);

    echo "<br>\n";
    #CREO UNA NUOVA LINEA********
    echo "L'ID di sessione è: ";
    #VISUALIZZA L'ID DI SESSIONE*******
    nome_utente();
    echo "<br>\n";
    ?>
    [/php]

    Ti ringrazio anticipatamente per la collaborazione.


  • User Attivo

    Ma il problema sone le variabili di sessione o le varibili $login_*?

    per le variabili $login_* prova ad aggiungere all'inizio della funzione global $login_admin;

    etc etc

    Dopo header(..); ti consiglio di mettere un exit();