Visualizzazione risultati 1 fino 5 di 5

Discussione: Come rinominare sessione php

  1. #1
    Guest

    Predefinito Come rinominare sessione php

    Ho protetto alcune directory del sito con un sistema di login in modo tale che soltanto l'amministratore possa avere accesso a quei file. Ma mi sono reso conto che se un utente normale dopo aver fatto il login con la sua sessione php può tranquillamente accedere a quelle directory. Mi chiedevo come posso rinominare una sessione in modo da avere una session_admin ed una session_esers.

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

    Predefinito

    Semplicemente, se è un amministratore devi settare un'altro tipo di sessione e/o nella sessione metti del contenuto differente per capire che si tratta di un amministratore.

    Non è sufficiente fare il controllo:
    Codice PHP:
    if(isset($_SESSION['nome']))
    Ciao!

  3. #3
    Guest

    Predefinito

    Imposti un campo dell'array session come id = admin o id = utente a seconda che chi ha fatto il login sia un admin o un utente
    (non capisco cosa intendi per rinominare una sessione)
    Tu fai session_start(); giusto?
    poi fai
    $_SESSION['tipo'] = "utente"; oppure = "admin" o meglio fai $_SESSION['admin'] = 1; per admin così puoi anche usarlo nelle if
    if($_SESSION['admin']) { qualcosa }
    else { qualcos'altro }

  4. #4
    Guest

    Predefinito

    Grazie mille a tutti e due il mio errore era quello di scrivere cosi:
    Codice PHP:
    if(isset($_SESSION['username']) == "Admin") { contenuto } else { header('Location: login.php');

  5. #5
    Guest

    Predefinito

    Avevi scritto bene, manca solamente una piccola aggiunta, l'ideale è avere una tabella SQL "utenti" con campi ID, USERNAME, PASSWORD, PROFILO, nella session recupererai il Profilo e lo Username, farai un fieldset che con la session recupererai lo username ed il profilo e scriverai benvenuto Floopop Profilo: Admin oppure Benvenuto Fractalcosmo profilo:Utente, recuperando lo username e il profilo(che puoi non mostrare nel fieldset, ovviamente) ma recuperando il profilo non scriverai

    Codice PHP:
    if (isset($_SESSION['username']) == "utente"){
    //mio codice
    }
    else{

    print
    "Non sei abilitato alla pagina";
    }
    Ma scriverai (ricordati di mettere l'exit però...):

    Codice PHP:

    if (isset($_SESSION['profilo']) == "amministratore"){
    //mio codice
    }
    else{

    print
    "Non sei abilitato alla pagina";
    exit;
    }
    L'ideale a mio avviso, poi ognuno fa come vuole, è scrivere una funzione di session ed una funzione di recupero valori se ti dovesse servire per esempio in un model mvc, ti posto due funzioni e come recupero il profilo nelle funzioni dove è permesso il lavoro all'amministratore, ovviamente la global dati è una funzione in più che recupera dei valori in globale se dovessi aver bisogno di recuperare il profilo ma dentro dei metodi....ti posto l'esempio con le due funzionalità..Ciao


    File funzioni.php

    Codice PHP:

    function globalDati(){

    security_session();

    $idUtente="";
    $userLoggato = "";
    $profiloUtente = "";
    $data = "";
    $ora = "";

    $datiUtente = $_SESSION['datiUtente'];

    $idUtente = $datiUtente['idUtente'];
    $userLoggato = $datiUtente['username'];
    $profiloUtente = $datiUtente['profilo'];

    setlocale(LC_TIME, 'it_IT');//Settiamo il timezone per l'orario
    date_default_timezone_set("Europe/Rome");
    $data = date("l j F, Y");
    $ora = date('G:i:A');

    $parametriGlobali['profiloUtente'] = $profiloUtente;
    $parametriGlobali['userLoggato'] = $userLoggato;
    $parametriGlobali['idUtente'] = $idUtente;
    $parametriGlobali['data'] = $data;
    $parametriGlobali['ora'] = $ora;


    return (
    $parametriGlobali);
    }

    function
    security_session(){

    $session_name = 'login_webLog'; // Imposta un nome di sessione
    $secure = false; // Imposta il parametro a true se vuoi usare il protocollo 'https'.
    $httponly = true; // Questo impedirà ad un javascript di essere in grado di accedere all'id di sessione.
    ini_set('session.use_only_cookies', 1); // Forza la sessione ad utilizzare solo i cookie.
    $cookieParams = session_get_cookie_params(); // Legge i parametri correnti relativi ai cookie.
    session_set_cookie_params(0); //Questo chiude distrugge i cookie chiudendo il browser bisognerà rifare il login,altrimenti la sessione rimane attiva chiudendo e riaprendo il browser
    session_name($session_name); // Imposta il nome di sessione con quello prescelto all'inizio della funzione.
    session_start(); // Avvia la sessione php.
    session_regenerate_id();

    }

    File model.php

    Codice PHP:

    include_once "funzioni.php";

    class
    router_ajax_model{

    public function
    gestioneTabelle($azione){

    $recuperoGlobali = globalDati();

    if (
    $recuperoGlobali['profiloUtente'] != 'amministratore'){
    $msg = "Non hai le abilitazioni per questa funzionalità";
    $msg = htmlentities($msg);
    echo
    $msg;
    exit;
    }
    }


    //Oppure

    public function permessi(){

    //var_dump($GLOBALS);
    security_session();
    $parametriGlobali = globalDati();

    ob_start();

    if (
    $parametriGlobali['profiloUtente']=="amministratore"){
    //mio codice
    }
    else{
    print
    "non sei abilitato";
    exit;
    }
    }

    public function
    gestioneUtente($azione){

    security_session();
    //var_dump($_SESSION);

    $datiUtente = $_SESSION['datiUtente'];
    $profilo = $datiUtente['profilo'];

    if (
    $profilo=="amministratore"){
    //mio codice
    }
    else{
    $msg = htmlentities("Non hai le abilitazioni per questa funzionalità");
    print
    $msg;
    exit;
    }

    //Questo metodo invece è la convalidaLogin, cioè quando devi convalidare il login gli altri metodi invece vengono usati a //Login effettuato, buona norma è inserire anche una funzione di check_login...

    public function convalidaLogin(){

    //check_login();
    security_session();

    if( !isset(
    $_GET['username']) || empty($_GET['username']) || trim($_GET['username'])=='')
    {
    $msg = "|";
    $msg .="USER_VUOTO";
    $msg = str_replace("\n", "", $msg);
    $msg = str_replace("\r", "", $msg);
    print
    $msg;
    exit;
    }

    if(!isset(
    $_GET['password']) || empty($_GET['password']) || trim($_GET['password'])=='')
    {
    $msg = "|";
    $msg .="PASS_VUOTA";
    $msg = str_replace("\n", "", $msg);
    $msg = str_replace("\r", "", $msg);
    print
    $msg;
    exit;
    }

    //Apriamo il Db PhpMyAdmin
    $db =connetti();
    //Caso errore connessione
    if ($db->connect_error) {
    $msg = "|";
    $msg .= "ERRORE_CONNESSIONE"."|";
    $msg .= "Impossibile connettersi a MySQL: (" . $db->connect_errno . ") " . $db->connect_error;

    $msg = str_replace("\n", "", $msg);
    $msg = str_replace("\r", "", $msg);
    print
    $msg;
    exit;
    }

    $sql = $db->prepare("SELECT * FROM utenti WHERE username = ? AND password = ?");
    $sql -> bind_param('ss', $username, $password);

    $username = trim($_GET['username']);
    $password = md5($_GET['password']);

    $sql->execute();
    $sql->store_result();

    if (
    $sql->num_rows() == '1'){

    $sql -> bind_result($id,$username, $profilo, $password);

    if (
    $sql->fetch()){

    //------------------------VALORI DELL'UTENZA-----------

    $user_browser = $_SERVER['HTTP_USER_AGENT'];
    $idUtente=$id;
    $profilo=$profilo;
    $username = $username;
    $datiUtente = array('idUtente'=>$idUtente,
    'username'=>$username,
    'profilo'=>$profilo);

    $_SESSION['datiUtente']=$datiUtente;

    $msg = "|";
    $msg .="OK";
    $msg = str_replace("\n", "", $msg);
    $msg = str_replace("\r", "", $msg);
    print
    $msg;
    exit;

    }

    }

    //------------------
    //Chiude Mysql DB
    chiudiConnessione($db);

    $msg = "|";
    $msg .="UTENTE_ASSENTE";
    $msg = str_replace("\n", "", $msg);
    $msg = str_replace("\r", "", $msg);
    print
    $msg;

    }


    }
    Come vedi ci sono varie metodologie...Ciao
    Ultima modifica di fractalcosmo : 16-05-2015 alle ore 14.52.53

Regole di scrittura

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