PDA

View Full Version : [PHP]Mantenere una sessione nelle pagine


DesmoColo
24-08-2007, 09:37
Sto facendo un piccolo portale dinamico utilizzando php.
Adesso sto implementando la pagina di amministazione, che semplicemente, dopo il login, permette all'amministratore di inserire il titolo.
nella pagina nomedominio/admin/index.php vi è contenuto il form per poter inserire user e password. Questo è il codice:
<?php
include("../config.inc.php");
include("top_foot.inc.php");
session_start();
dbconnect();
if (!isset($verified_user)) $verified_user='';
if ($action=='login') {
$result=mysql_query("SELECT id_user FROM mmkit_users WHERE username='".$username."' AND password='".$psw."'");
if (mysql_num_rows($result)>0) list($verified_user)=mysql_fetch_row($result);
else $verified_user='';
}
session_register("verified_user");
top();
?>
<?php
echo"<br>";
if ($verified_user != '') {
echo"<b>Pagina di Amministrazione</b><br>";
echo"<h1>Che cosa vuoi fare?</h1>";
echo"<div class=\"divCenter\">";
echo"<div id=\"divTable\" class=\"divTable\" align=\"center\">";
echo"<table width=\"200\" border=\"1\" align=\"left\">";
echo"<tr>
<td>Articoli</td>
<td>&nbsp;</td>";
echo"<td><form id=\"form1\" name=\"form1\" method=\"post\" action=\"insert.php\">";
echo"<input type=\"submit\" name=\"newArticle\" id=\"newArticle\" value=\"Nuovo Articolo\" />";
echo "</form> </td>
<td>&nbsp;</td>";
echo"<td><form id=\"form4\" name=\"form4\" method=\"post\" action=\"../all.php\">";
echo"<input type=\"submit\" name=\"viewArticle\" id=\"viewArticle\" value=\"Visualizza Articoli\" />";
echo"</form> </td>
</tr>
<tr>
<td>Annunci</td>
<td>&nbsp;</td>";
echo"<td><form id=\"form2\" name=\"form2\" method=\"post\" action=\"\">";
echo"<input type=\"submit\" name=\"newAnnuncement\" id=\"newAnnuncement\" value=\"Nuovo Annuncio\" />";
echo" </form> </td>
<td>&nbsp;</td>";
echo"<td><form id=\"form5\" name=\"form5\" method=\"post\" action=\"\">";
echo" <input type=\"submit\" name=\"Visualizza Annunci\" id=\"viewAnnuncement\" value=\"Visualizza Annunci\" />";
echo"</form> </td>
</tr>
<tr>
<td>Gallery</td>
<td>&nbsp;</td>";
echo"<td><form id=\"form3\" name=\"form3\" method=\"post\" action=\"\">";
echo"<input type=\"submit\" name=\"NewAlbum\" id=\"NewAlbum\" value=\"Nuovo Album\" />";
echo" </form> </td>
<td>&nbsp;</td>";
echo"<td><form id=\"form6\" name=\"form6\" method=\"post\" action=\"\">";
echo" <input type=\"submit\" name=\"viewAlbums\" id=\"viewAlbums\" value=\"Visualizza Albums\" />";
echo"</form> </td>
</tr>
</table>
</div>";
} else {
if ($action == "login" && $verified_user == '') {
echo"<font color=\"red\">Login error!</font><br><br>";
}
?>
<form name="login_form" action="index.php" method="post">
<input type="hidden" name="action" value="login">
Username: <input type="text" name="username">
Password: <input type="password" name="psw"> <input type="submit" name"Login" value="Login"></form>
<?php
}


?>
<?
foot();
?>

Il login funziona, ma ecco il punto. Adesso vorrei che solo e soltanto l'utente loggato possa accedere alle pagine dentro la cartella admin... però se uno fa
nomedominio/admin/altrapagina.php senza passare dalla index vi accede tranquillamente. Come faccio a mantenere il log dell'utente? Ovvero vorrei che se qualcuno diverso dall'admin prova ad accedere ad altrapagina.php gli venga impedito l'accesso se prima non si logga.

cionci
24-08-2007, 09:56
session_register non si usa più.
session_start mettilo prima degli include.

Per registra una variabile di sessione usa il vettore globale $_SESSION:

$_SESSION["logged_in"] = $username;

Nelle pagine che devono essere protette usa:

session_start();

if(!isset($_SESSION["logged_in"])
exit("Unknown user");

session_start va messo prima di qualsiasi output.

Inoltre mi sembra che tu stia facendo uso delle variabili autoglobali, cioè le variabili passate tramite POST o GET vengono dichiarate come variabili globali. Questa è una cosa sconsigliata per motivi di sicurezza già dalla versione 4.
Fai uso dei vettori associativi $_POST e $_GET: $_POST["username"] ad esempio per recuperare la variabile username passata da un form.
Se hai seguito una guida per imparare PHP ti consiglio di buttarla.

DesmoColo
24-08-2007, 11:44
[QUOTE=cionci;18379275]session_register non si usa più.
session_start mettilo prima degli include.

Nelle pagine che devono essere protette usa:

session_start();

if(!isset($_SESSION["logged_in"])
exit("Unknown user");


Mi viene restituito un errore di sintassi:
Parse error: syntax error, unexpected T_EXIT

PS: OK... ho bruciata la guida php ;-)

cionci
24-08-2007, 12:04
Manca una tonda chiusa ;)