Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Sessioni

  1. #1

    Sessioni

    Mi sono trovato di fronte a un dilemma mentre realizzavo una pagina di login:
    uso le sessioni per controllare se un utente si è loggato con successo, se l'utente inserisce username e password giusti vengono salvati in due variabili di sessione $_SESSION['user'] e $_SESSION['pass'].
    Mi chiedevo se salvare la password in chiaro in una variabile di sessione sia sicuro e se inizializzare una sessione dentro una classe sia corretto.
    Grazie per eventuali risposte

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    ciao addictedtophp,
    più che chiedersi se sia sicuro io mi chiederei se è necessario....e mi risponderei di no, a meno di necessità particolari, ma in goni caso avrebbe più senso memorizzare l'hash della password.
    La sessione può essere tranquillamente inizializzata tramite un metodo di una classe

  3. #3
    Non conviene mai salvare dati sensibili in chiaro su variabili di sessione.
    La sessione deve sempre partire nell'index nella prima riga assoluta del file.
    Io ti consiglierei di creare un login passando direttamente i dati sensibili ad un oggetto che si preoccupi di verificarne la validità, che registri su db l'avvenuto login in modo da poter controllare anche la durata dei login e salvare nella variabile di sessione solo un valore che ricordi di essere loggati.
    Il cotrollo è triplice:
    1- login iniziale
    2- controllo temporale della sessione in modo da evitare login dimenticati aperti con controlli ad ogni cambio pagina
    3- variabile di sessione che segna l'avvenuto login

    Spero di essere stato chiaro e soprattutto di aiuto



    CIAO
    Ok-Web! OpenSource Development for Web 2.0 (HTML5 - CSS3 - JAVASCRIPT - PHP - JAVA and more...)

  4. #4
    Quindi una cosa del genere potrebbe andare bene:
    Pagina di login:
    Codice PHP:
    <!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <head>
    <?php session_start();?>
    <?php 
    require_once 'PhpClass/connection.Class.php'?>
    <?php 
    require_once 'PhpClass/login.Class.php'?>
    </head>
    <html>
        <body>
        <?php     
                
            $log 
    = new loginClass();
            
            if(!
    $log->isConnected())
            {
                if(isset(
    $_POST['uname']) && isset($_POST['passw']))
                {        
                    
    $filteredUser addslashes($_POST['uname']);
                    
    $filteredPass addslashes($_POST['passw']);
                    
    $connessione = new connect();
                    
    $connessione->connessioneMysql(usert', 'pass', 'host', 'db');    
                    $verify = $log->login($filteredUser, $filteredPass);
                    if($verify)
                        header("Location: prova.php");
                    else
                        header("Location: ".$_SERVER['
    PHP_SELF']);
                }
                else 
                {                    
        ?>
            Inserire username e passsword
            <form method="post" action="<?php echo $_SERVER['
    PHP_SELF'];?>">
                Username<input type="text" name="uname">

                Password<input type="password" name="passw">

                <button type="submit">invia</button>
            </form>
        <?php 
                }
            }
            else 
                header("Location: prova.php");
        ?>
        </body>
    </html>
    e classe per il login:
    Codice PHP:
    <?php

    class loginClass{

        public function 
    isConnected(){
            return (!isset(
    $_SESSION['logged'])) ?  false :  true;
        }
        

        public function 
    login($user$pass){
            
            
    $sql="SELECT id FROM users WHERE username=".$user." AND password=".$pass." LIMIT 1";
            
    $result=mysql_num_rows($sql);
            if(
    $result=='1')
            {
                
    $_SESSION['logged']='ok';
                return 
    true;
            }
            else     
                return 
    false;
            
        }

    }
    poi per ogni altra pagina farò il controllo sulla variabile session
    Codice PHP:
    session_star();
    if(isset(
    $_SESSION['logged']))
    ..... 

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    ciao addictedToPhp
    come da documentazione la funzione session_start va chiamata prima di ogni output, così come la funzione header, quindi la parte di codice che si occupa di verificare se l'utente è già loggato o ha già inviato la post con user e password andrebbe messa in cima al codice, prima dell'html, la form può rimanere dov'è senza necessità di stare dentro al blocco else, perchè in ogni caso se l'utente è già autenticato verrà reindirizzato altrimenti visualizzerà la form.
    Per filtrare i parametri della query è più indicato utilizzare mysql_real_escape_string().

  6. #6
    session_start() è chiamato prima di ogni output; quando viene richiamato infatti non è ancora visualizzato nulla. Per quanto riguarda il codice lo tengo così per questioni di ordine , leggibilità e per facilitare le modifiche in futuro, però anche per questo sono aperto a critiche e osservazioni. per filtrare le variabili di user e password ho usato mysql_real_escape _string, e volevo chiederti in cosa differiva dalle altre funzioni di escape.

  7. #7
    Nessuna osservazione sul layout del codice?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.