Bloccare utente se non loggato con script php

giancadeejay

Utente Attivo
26 Ott 2010
224
0
16
torino
Ciao a tutti,
ho un problema..
Ho creato un sito in php e vorrei che se un utente non e' loggato venga reindirizzato alla pagina di login.
Sono alle prime armi..ho gia' dato un occhiata a sessioni e a qualche post su questo forum,ma non riesco a risolvere il blocco.
In pratica se l'utente conosce l'indirizzo della pagina entra ugualmente.
Ho db mysql .
Potete darmi una mano?
 
Ciao a tutti,
ho un problema..
Ho creato un sito in php e vorrei che se un utente non e' loggato venga reindirizzato alla pagina di login.
Sono alle prime armi..ho gia' dato un occhiata a sessioni e a qualche post su questo forum,ma non riesco a risolvere il blocco.
In pratica se l'utente conosce l'indirizzo della pagina entra ugualmente.
Ho db mysql .
Potete darmi una mano?
Ciao, anche io sono molto alle prime armi, quindi ti dico cosa farei per logica.
Io imposteterei un controllo sul valore di.login che metterei per esempio a 1 per ogni utente loggiato, e inserirei alla/e pagina/e interessata/e un controllo su questo valore, verificherei quindi così che l'utente sia già loggiato, diversamente lo mandarmi diritto alla pagina di login. Potrei anche impostare una durata dei cookies breve, tipo 10 minuti. Dopodiché dovrò loggarmi nuovamente se non opero sul sito.

Sicuramente qualcuno saprà essere più preciso e soprattutto darti consigli con codice compreso.

Buone feste a tutti
 
Ecco le mie pagine:
login.php
Codice:
<?php

    include 'header.php';

?>

    <div id="wrapper">
    
        <?php
        
            $p = $_GET['azione'];
            
            // login.php?azione=login
            if($p == "login"){
            
                if(!isset($_POST['invia'])){ ?>
                    
                    <form method="post" action="#" id="formlogin">
                    
                        <label for="username"><font color='white'>USERNAME</font></label><br>
                        <input type="text" name="username" id="username" /><br><br><br>
                        <label for="password"><font color='white'>PASSWORD</font></label><br>
                        <input type="password" name="password" id="password" /><br><br><br><br>
                        <input type="submit" name="invia" id="login" value="ACCEDI" />
                    
                    </form><br><br><br>
                <a href="password_dimenticata.php"><font color='white'><strong>PASSWORD DIMENTICATA?</stong></font></a>   
<?php             } else {

                    $username = mysql_real_escape_string($_POST['username']);
                    $password = mysql_real_escape_string($_POST['password']);
                    
                    if($username == "" || $password == ""){
                    
                        echo "<h1><font color='white'>ATTENZIONE , DEVI COMPILARE TUTTI I CAMPI !</font></h1>";
                              header("Refresh: 4; URL= http://MIOSITO/registrazione_utenti/login.php?azione=login"); 
                    } else {
                    
                        $password_cript = md5($password);
                        
                        $recuperadati = mysql_query("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'");
                        
                        $verificadati = mysql_num_rows($recuperadati);
                        
                        if($verificadati == 1){
                        
                            $sessione = mysql_fetch_array($recuperadati);
                            $_SESSION['utente'] = $sessione['username'];
                            echo "<h1><font color='white'>LOGIN EFFETTUATO CON SUCCESSO!</font></h1>";
                            header("Refresh: 2; URL= ../registrazione_utenti/index_ok.php");
                        
                        } else {
                        
                            echo "<h1><font color='white'>DATI ERRATI , RIPROVA !</font></h1>";
                                header("Refresh: 4; URL= http://placezero.altervista.org/registrazione_utenti/login.php?azione=login"); 

                        }
                    
                    }
                
                }
            
            
            // login.php?azione=logout
            } elseif ($p == "logout"){
            
                session_destroy();
                echo "<font color='white'><h1>LOGOUT EFFETTUATO CON SUCCESSO!</h1></font>";
                header("Refresh: 3; URL=http://MIOSITO/index.php ");
            
            }
        
        
        
        ?>
    
<?php session_start(); ?>

Nessuno mi sa aiutare sulle sessioni a tempo.
Mi interesserebbe far scadere la sessione ogni 10 min e non permettere a nessuno,anche se conosce l'indirizzo delle pagine,di accedere senza aver effettuato il LOGIN...
Sto studiando php ma tra lavoro etc etc non e' sempre facile...
 
ciao @giancadeejay
innanzi tutto qui ti da errore (lo stesso per altre righe)
PHP:
<?php
//.....
    echo "<h1><font color='white'>LOGIN EFFETTUATO CON SUCCESSO!</font></h1>";
    header("Refresh: 2; URL= ../registrazione_utenti/index_ok.php");
//....
?>
la funzione header non può venire dopo un uotput html e l'echo che fai appena prima è un output html
analogo discorso per la funzione session_start() che deve venire prima di qualsiasi output
tra l'altro fai diversi outpt prima es. <div id="wrapper"> e non so cosa ci sia dentro header.php che includi

oggi sono un po' impeganato eventualmente ci risentiamo il 2.
 
Ciao,
non ho provato il tuo codice ma, come suggerito da paperino78, dovrai creare una variable di sessione (ad es. $_SESSION['loggato'] che inizieralizzerai a NO o a 0 (zero = non loggato), dopodichè trasformerai tutte le pagine del sito
in altrettante pagine PHP, in testa alle quali controllerai la variabile di sessione: se è uguale a NO (o a zero = utente non loggato)
lo reindirizzerai alla pagina di LOGIN (naturalmente, una volta che l'utente si è loggato dovrai aggiornare la relativa variabile di sessione) altrimenti gli darai accesso alla pagina
In questo modo, anche se l'utente dovesse bypassare la pagina del login, verrà comunque reindirizzato lì, finchè non si sarà effettivamente loggato
 
Ultima modifica:
ciao
io ho fatto cosi con tre pagine
1) pagina di log.php con il classico form
2) una paginetta che ho chiamato transito.php in puro php (niente html)
3) la pagina (o le pagine) riservata.php

log.php
PHP:
<?php
session_start();
$verifica=md5(rand(1000,9999));//genero un numero casuale e lo camuffo
//ad ogni accesso il valore cambia random
//lo passo in sessione
$_SESSION['verifica']=$verifica;
?>
<!-- form di log -->
<form action="transito.php" method="post" name="log">
tuo username <input name="user" type="text" /><br />
tua passvord <input name="pass" type="password" />
<!-- trametto il valore di verifica tramite input hidden -->
<input name="verifica" type="hidden" value="<?php echo $verifica; ?>" />
<input name="loggati" type="submit" />
</form>
transito.php
PHP:
<?php
session_start();
if($_SESSION['verifica'] != $_POST['verifica']){
    //quanto generato dalla sessione è diverso da post
    //quindi NON provengo dal form di log
    if(isset($_SESSION))session_destroy();
    header('location:index.php');// o altrove
    exit();
}else{
    //sessione e post di verifica coincidono
    //dati di connessione..
    $user=$_POST['user'];
    $pass=$_POST['pass'];
    $query=mysqli_query($connessione,"SELECT user, pass FROM utenti WHERE user='$user' && pass='$pass'");
    if(mysqli_num_rows($query) ==0){
        //non iscritto
        if(isset($_SESSION))session_destroy();
        header('location:index.php');// o altrove
        exit();
    }else{
        $utente=mysqli_fetch_assoc($query);
        $_SESSION['nome']=$utente['user'];
        $_SESSION['password']=$utente['pass'];
        header('location:riservata.php');// o altrove
        exit();
    }
}
?>
riservata.php
PHP:
<?php
session_start();
if(!isset($_SESSION['nome']) || !isset($_SESSION['password'])){
    //una o entrambe le sessioni non esistono
    if(isset($_SESSION))session_destroy();
    header('location:transito.php');// o altrove
    exit();
}else{
    //le sessioni esistono
?>
<!DOCTYPE html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>
<body>
<?php
    echo "ciao ".$_SESSION['nome']."<br />";
    //quello che serve...ecc...
    //per il loguot rimando a transito.php che pensa a distruggere le sessioni
    //rimandando alla index
    echo "<a href=\"transito.php\">logaut<a>";
echo "</body>";
}
?>
in questo modo sono abbastanza sicuro (in rete sicurezza al 100% non esiste) che si possa accedere alle pagine riservate solo passando dal log e con utente registrato
 
Ragazzi ........Borgo Italia e' un grande ! Ho risolto Borgo...adesso quando tenti di entrare senza effettuare il LOGIN ti ributto alla pagina di login e sei costretto a farlo...grande! ma volevo anche inserire una"SESSIONE TIMEOUT"
tipo questa ma non so come implementarla nel codice ...ho gia' creato una paginetta che ti avverte che la sessione e' terminata..
Codice:
// set timeout period in seconds (600 = 10 minutes in seconds)
$inactive = 300;

// check to see if $_SESSION['timeout'] is set
if(isset($_SESSION['timeout']) ) {
     $session_life = time() - $_SESSION['timeout'];
     if($session_life > $inactive) {
          session_destroy(); header("Refresh: 2; URL= http://MIOSITO/registrazione_utenti/sessione_scaduta.php");
     }
}

$_SESSION['timeout'] = time();
 
ciao
questo problema devi risolverlo con js, prova a cercare un conteggio alla rovesia che quando terminato ti riinvii, come il solito, alla transito.php.
prova a postare il problema nella sezione javascript
 

Discussioni simili