session e area protetta

Buongiorno,

vi chiedo pervavore di aiutarmi a creare le pagine protette del mio sito "personali".

Mi spiego meglio:

io ho un database mysql nella quale ci sono gli utenti con le relative usr e pass.

Ho inserito anche un ulteriore record con la pagina nella quale negono indirizzati una volta inseriti user e pass.

Tutto funziona bene, l'unica cosa è che se io inserisco il percorso della pagina diretta e sono autenticato riesco ad entrare anche nelle pagine altrui...come posso fare?

grazie

inviato 9 anni fa
danilob
X 0 X

Dopo aver controllato nome utente e password usi le sessioni per memorizzare l'esito positivo del login?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

si certo io riesco a fare il redirect sulla pagina che mi interessa è che ho indicato nel record del database mysql.

Il problema è che solo il sig. Rossi ad esempio può entrare nella pagina rossi.php mentre invece mario deve entrare nella pagina mario.php. Se io scrivo l'indirizzo esatto nella barra del browser una volta loggato posso entrare ovunque..

risposto 9 anni fa
danilob
X 0 X

In sessione allora devi memorizzare anche la pagina che l'utente loggato può vedere, così in ciascuna pagina privata puoi mettere un controllo sull'accesso.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

grazie gianni ma è proprio questo che non riesco a fare....

risposto 9 anni fa
danilob
X 0 X

Per verificare lo username e la password dell'utente immagino che tu faccia una SELECT, giusto? Allora con questa SELECT leggi anche il nome della pagina privata associata all'utente (che avrai messo nella stessa tabella utenti di MySQL) e mettila in sessione.

Poi, all'inizio di ogni pagina privata controlla il valore conservato in sessione e verifica se corrisponde alla pagina corrente.

Qual'è la prima operazione che non sai fare?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

nella pagina di login io faccio così ( e mi funziona mi manda alla pagina specificata nel record club, ma poi è la pagina del record club che non riesco a proteggere)

<?

session_start();

@include "/config/connessione.php";

$username = $_POST["Mod_Login"];       

$password = $_POST["Mod_Pass"];   

//query d'estrazione dei dati di login      

$query = "SELECT club FROM tb_user_club WHERE username = '$username' AND password = '$password'";   

$result = @mysql_query($query) or die (mysql_error());

$riga = mysql_fetch_array($result, MYSQL_ASSOC);

if(mysql_num_rows($result) >0)

{

$vai_a = ($riga['club']);

header("location: " .$vai_a); //da sostituire col redirect

$_SESSION["valid_user"] = $_POST["Mod_Login"];

$_SESSION["valid_pass"] = $_POST["Mod_Pass"];

$_SESSION["valid_pass"] = $riga['club'];

$_SESSION["valid_accesso"] = $riga['livello'];

$_SESSION["valid_time"] = time();

}else{

echo  die("<p align= \"center\">Devi inserire sia username che password.</p>         

<p align= \"center\">Se non sei iscritto vai alla pagina di <a href=\"../utenti/iscrizione_utenti.php\">iscrizione</a></p>

<p align= \"center\"><a href=\"login.php\">Riprova a loggarti</a></p>");   

"bad login";

}

  ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Documento senza titolo</title>

</head>

<body>

<form id="form1" name="form1" method="post" action="">

  Login:

  <label>

  <input name="Mod_Login" type="text" id="Mod_Login" />

  </label>

  <p>Password:

    <label>

    <input name="Mod_Pass" type="text" id="Mod_Pass" />

    </label>

</p>

  <p>

    <label>

    <input type="submit" name="Submit" value="invia" />

    </label>

</p>

</form>

  <p>

    <label></label>

</p>

  <p>&nbsp;</p>

  <p>

    <label></label>

  </p>

</body>

</html>

risposto 9 anni fa
danilob
X 0 X

cambia

$_SESSION["valid_pass"] = $riga['club'];

in

$_SESSION["valid_club"] = $riga['club'];

poi nelle pagine da proteggere metti all'inizio (dopo il session_sart())

if($_SESSION["valid_club"] != "pagina_personale_1.php") {
   die("accesso non consentito");
}

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ok Gianni ma non si potrebbe sostituire a pagina_personale.php il nome del record della tabella. Così evito di specificare il nome in ogni pagina:

$riga['club'];

risposto 9 anni fa
danilob
X 0 X

Gianni ci sei, non mi abbandonare prorio adesso... Sono 2 mesi e sento che sono vicino alla soluzione..Please

risposto 9 anni fa
danilob
X 0 X

così dovrebbe funzionare:

<?

session_start();

$_SESSION['valid_accesso'];

$_SESSION['user'];

echo "Il tuo nome è " . $_SESSION['user'] . "<br>";

echo "Il tuo accesso " . $_SESSION['valid_accesso'] . "<br>";

if ($_SESSION["valid_accesso"]= "base")

{

header("location: login.php ");

}else{

echo "uguale a base";

}

?>

mi dà questo errore:

Warning: Cannot add header information - headers already sent by (output started at c:\programmi\easyphp\www\sito_palestra\prova.php:7) in c:\programmi\easyphp\www\sito_palestra\prova.php on line 12

cosa può essere?

risposto 9 anni fa
danilob
X 0 X

Warning: Cannot add header information - headers already sent by (output started at c:\programmi\easyphp\www\sito_palestra\prova.php:7) in c:\programmi\easyphp\www\sito_palestra\prova.php on line 12

cosa può essere?

...bastava fare una ricerca nel forum... comunque hai messo degli spazi o degli "a capo" prima del tag <? all'interno dello script PHP

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie gianni ci sono riuscito.... Ti posso solo chiedere se la forma è corretta anche per la sicurezza? Ti riporto il codice e ti ringrazio per la pazienza (tanta) che hai avuto. Grazie di cuore:

Pagina login.php

<?

session_start();

@include "/config/connessione.php";

$username = $_POST["Mod_Login"];       

$password = $_POST["Mod_Pass"];   

//query d'estrazione dei dati di login      

$select = "SELECT * FROM tb_user_club WHERE username = '$username' AND password = '$password'";   

$query = mysql_query($select);

if($query){

    if (mysql_num_rows($query)>0){

        $row = mysql_fetch_assoc($query);

        $_SESSION['user'] = $row['username'];

        $_SESSION['pagina'] = $row['club'];

      $_SESSION["valid_accesso"] = $row['livello'];

       header("location: ".$row['club']);

    }else{

        echo "<script language=javascript>alert('utente inesistente');</script>";

    }

}else{

echo "<script language=javascript>alert('errore di connessione. riprova più tardi');</script>";

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Documento senza titolo</title>

</head>

<body>

<form id="form1" name="form1" method="post" action="">

  Login:

  <label>

  <input name="Mod_Login" type="text" id="Mod_Login" />

  </label>

  <p>Password:

    <label>

    <input name="Mod_Pass" type="text" id="Mod_Pass" />

    </label>

</p>

  <p>

    <label>

    <input type="submit" name="Submit" value="invia" />

    </label>

</p>

</form>

  <p>

    <label></label>

</p>

  <p>&nbsp;</p>

  <p>

    <label></label>

  </p>

</body>

</html>

Codice da inserire nelle pagine protette:

<?

session_start();

if ($_SESSION["valid_accesso"]!="base")

{

header('location: login.php');

}else{

echo "Benvenuto ".$_SESSION['user'];

}

?>

risposto 9 anni fa
danilob
X 0 X

UIn rischio sulla sicurezza ce l'hai quando fai la SELECT inserendo nella query i dati $_POST presi direttamente dall'utente. Dovresti invece procedere in questo modo (si parla di una INSERT ma il ragionamento è lo stesso):

http://www.phpnews.it/corsi/corso-php-mysql/inserimento-dati/

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ok! Grazie ci sono riuscito, in locale funziona perfettamente invece sul server non mi manda alla pagina protetta ma mi ritorna alla pagina del login.... Cosa può essere secondo te?

Non mi dà errori se metto user e pass giusti, ritorona semplicemente al form di accesso...

risposto 9 anni fa
danilob
X 0 X

verifica se la query va a buon fine, se la connessione al DB funziona...

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

si, prova anche tu...La pagina di login la trovi su www.newbodycenterclub/login.php

prova a inserire user: danilo

pass:1234

al posto di farti header alla pagina prova.php ti riapre il form, mentre in locale funziona... Ti posto i codici:

login.php

<?

session_start();

include "config/connessione.php";

$username = $_POST["Mod_Login"];       

$password = $_POST["Mod_Pass"];   

//query d'estrazione dei dati di login      

$select = "SELECT * FROM tb_user_club WHERE username = '$username' AND password = '$password'";   

$query = mysql_query($select);

$row = mysql_fetch_array($query);

if($query){

    if (mysql_num_rows($query)>0){

        $_SESSION['user'] = $row['username'];

        $_SESSION['pagina'] = $row['club'];

      $_SESSION["valid_accesso"] = $row['livello'];

       header("location: ".$row['club']);

    }else{

        echo "<script language=javascript>alert('utente inesistente');</script>";

    }

}else{

echo "<script language=javascript>alert('errore di connessione. riprova più tardi');</script>";

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Documento senza titolo</title>

</head>

<body>

<form id="form1" name="form1" method="post" action="">

  Login:

  <label>

  <input name="Mod_Login" type="text" id="Mod_Login" />

  </label>

  <p>Password:

    <label>

    <input name="Mod_Pass" type="text" id="Mod_Pass" />

    </label>

</p>

  <p>

    <label>

    <input type="submit" name="Submit" value="invia" />

    </label>

</p>

</form>

  <p>

    <label></label>

</p>

  <p>&nbsp;</p>

  <p>

    <label></label>

  </p>

</body>

</html>

prova.php

<?

session_start();

if ($_SESSION["valid_accesso"]!="base")

{

header('location: default.php');

}else{

echo "Buongiorno ".$_SESSION['user'];

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Documento senza titolo</title>

</head>

<body>

</body>

</html>

risposto 9 anni fa
danilob
X 0 X

se poi vai su www.newbodycenter.it/prova.php vedrai che ti riconosce come loggato...

risposto 9 anni fa
danilob
X 0 X

metti un

error_reporting(E_ALL);

come prima istruzione dello script e controlla se vengono generati degli errori.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

$row['club'] cosa contiene esattamente?

può essere sbagliato l'indirizzo.

risposto 9 anni fa
LonelyWolf
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda