Salve,
premetto che prima di annoiare il forum, ho spulciato in lungo e largo, (almeno credo di averlo fatto diligentemente) leggendo pillole, aspirine e caramelle, e dopo due giorni di super stress, ho deciso di postare il problema che mi affligge ad una ampia platea, sperando di non dire sciocchezze e ripetere domande già fatte.
Ho una area riservata, dove attraverso un db in mysql vengono estratti la usr e pass per essere autenticati gli utenti. La form di autenticazione è stata fatta con un wizard di DW (MX04), al quale ho dovuto fare una modifica in quando, non era contemplato il fattore campo username e password vuoti. (questi dati vengono recuperati dalla compilazione di una form di iscrizione)
Il problema più grosso che ho avuto è stato creare una sessione da collegare a tutte le pagine che sono nell'area riservata; ho fatto vari "pasticci" seguendo i consigli e i post che ho trovato, ma naturalmente tra errori di header e scritture errate di variabili. un mio amico, mi ha gentilmente spiegato come fare e fornito un po' di codice per avere la sessione in tutte le pagine... ebbene, sono stato così bravo da non riuscire a farlo funzionare! :^)
Vi posto il codice PHP della pagina di login:
-----
Codice PHP:
<?php require_once('db_con/aut.inc.php'); ?><?php
// *** Validate request to login to this site.
session_start();
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($accesscheck)) {
$GLOBALS['PrevUrl'] = $accesscheck;
session_register('PrevUrl');
}
/*
modifica personale: cambio if (isset($_POST['username']))
in if (!empty($_POST['username'])) per evitare il login a
a usr e pws vuoti
*/
if (!empty($_POST['username'])) {
$loginUsername=$_POST['username'];
$password=$_POST['password'];
$MM_fldUserAuthorization = "PASSWORD";
$MM_redirectLoginSuccess = "index_2.php";
$MM_redirectLoginFailed = "login_errore.php";
$MM_redirecttoReferrer = false;
mysql_select_db($database_aut, $aut);
$LoginRS__query=sprintf("SELECT username, PASSWORD, PASSWORD FROM $tab_dati WHERE username='%s' AND PASSWORD='%s'",
get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password));
$LoginRS = mysql_query($LoginRS__query, $aut) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = mysql_result($LoginRS,0,'PASSWORD');
//declare two session variables and assign them
$GLOBALS['MM_Username'] = $loginUsername;
$GLOBALS['MM_UserGroup'] = $loginStrGroup;
//register the session variables
session_register("MM_Username");
session_register("MM_UserGroup");
if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
-----
alla fine di questo codice, ho inserito la "sessione" fatta dal mio amico per creare una sessione:
-----
Codice PHP:
<?php
session_start();
$_SESSION['connesso']="ok";
?>
-----
in tutte le altre pagine che fanno parte della area riservata, in cima alla pagina, questo codice:
-----
Codice PHP:
<?php
session_start();
if ($_SESSION['connesso']!="ok")
{
session_destroy();
header("Location: index.php");
}
?>
-----
index.php è la pagina di login.
Premetto: ho controllato se sul server "Session" fosse abilitato, infatti eseguendo phpinfo, mi restituisce " Support", tutti parametri sono standard; la versione di PHP è 4.2.2, a breve, dovrebbe essere cambiata con una più alta, non la 5. (presumo 4.3.x)
Se tento di raggiungere una pagina interna, (dopo aver scaricato la cache etc) vengo dirottato sulla index, mi "loggo", e successivamente, anche dopo aver chiuso il browser, riavviato e etc etc riesco a bypassare la protezione.
Ora, come mai, la sessione non si distrugge con la chiusura del browser?
Cosa dovrebbe essere messo? Ho anche provato con un cookie, ma non ho ottenuto risultato, magari ho sbagliato anche quello! :^)
Scusate la lunghezza e grazie a chi leggerà e a chi risponderà.