Con una bella fatica sono riuscito a mettere in piedi un "copia-incolla" di varie funzioni che ho letto su internet.
Lo scopo è, tanto per cambiare, consentire l'accesso alle pagine php previo controllo di nome utente e password.
Stranamente sembra funzionare, se chiamata dalla pagina principale.
Quello che non so fare è ritornare ad una pagina PHP.
In sostanza gli script PHP iniziano tutti così
codice:
<?php
if(!isset($_SESSION))
{
session_start();
}
$_SESSION['came_from'] = $_SERVER['REQUEST_URI'];
if (!(isset($_SESSION['logged']) && $_SESSION['logged'] == 1))
{
header ("Location: login.php");
exit;
}
... qui c'è il resto della pagina cui si può accedere quando loggati ...
?>
In pratica (credo) venga riempita una variabile globale (came_from) con l'indirizzo della pagina corrente; se la variabile l' logged non è impostata allora va alla pagina login.php, che è questa
codice:
<?php
if(!isset($_SESSION))
{
session_start();
}
include 'db.inc.php';
$mysqli = new mysqli(MYSQL_HOSTNAME,MYSQL_USER,MYSQL_PASSWORD,MYSQL_DATABASE);
if (mysqli_connect_errno())
{
die ('Errore MMM in connessione al DBMS: '.mysqli_connect_error());
}
$username = (isset($_POST['username'])) ? trim($_POST['username']) : '';
$password = (isset($_POST['password'])) ? $_POST['password'] : '';
$redirect = (isset($_REQUEST['redirect'])) ? $_REQUEST['redirect'] : 'index.php';
if (isset($_POST['submit']))
{
$codicepersonale=$username;
$miapassword=$password;
$candidato='sememalefico'.$miapassword;
$query = 'SELECT * FROM personale WHERE codicepersonale = "' .$codicepersonale. '" AND portalepassword = sha1(sha1('.'"'.$candidato.'"))';
$risultato=$mysqli->query($query);
if ($risultato->num_rows > 0)
{
$row = $risultato->fetch_assoc();
$_SESSION['username'] = $username;
$_SESSION['logged'] = 1;
$_SESSION['admin_level'] = 1; //tante altre cose lette dal db
$mysqli->close();
if (isset($_SESSION['came_from']))
{
header("Location: http://" . $_SERVER['HTTP_HOST'] . $_SESSION['came_from']);
}
else
{
header ('Refresh: 5; URL=' . $redirect);
echo '
Sarai rediretto alla pagina originale</p>';
echo '
Attendi o clicca qui.</p>';
}
}
else
{
$_SESSION['username'] = '';
$_SESSION['logged'] = 0;
$_SESSION['admin_level'] = 0;
$error = '
Impossibile connettersi</p>';
$mysqli->close();
}
}
?>
<html class="ui-mobile">
<?php include "robajmobile.inc.php"; ?>
<body>
<div data-role="header">
indietro<h1>Login</h1>
</div>
<?php
if (isset($error))
{
echo $error;
}
?>
<form action="login.php" method="post">
<label for="text-1">Codice personale </label>
<input type="text" data-clear-btn="true" name="username" id="username" value="">
<label for="text-2">Password </label>
<input type="text" data-clear-btn="true" name="password" id="password" value="">
<input type="hidden" name="redirect" value=""/>
<input type="submit" name="submit" value="Login" data-theme="b"/>
</form>
</body>
</html>
E qui casca l'asino (cioè io): c'è un doppio controllo della variabile globale came_from e si usa un campo POST nascosto (hidden) chiamato redirect.
Da quanto ho capito è una tecnica abbastanza standard per far sì che si torni alla pagina php dove si è tentati di entrare.
Peccato però... che non funzioni!!!
Chiarisco cosa significa "non funziona": il problema è gestire index.php, diciamo la pagina principale.
Perchè???