Posto il codice completo. Un esempio in più di codice funzionante non fa mai male
index.php
codice:
<?php
session_start();
define('SESSION_TTL', 30);
echo '<pre>';
print_r($_SESSION);
echo '</pre>';
echo '<pre>';
print_r($_COOKIE);
echo '</pre>';
?>
<html>
<head>
<title>PHP Autentication</title>
</head>
<body>
<?php
echo 'controllo se la sessione è valida...';
if (isset($_SESSION['lifetime'])) {
if (time() - $_SESSION['lifetime'] > SESSION_TTL) {
echo 'no.
';
session_unset();
session_destroy();
echo 'controllo se esiste il cookie...';
if (isset($_COOKIE['phpaut'])) {
echo 'si. Rigenero la sessione.
';
session_start();
$session_data = array(
'lifetime' => time(),
'username' => $_COOKIE['phpaut']['username'],
'password' => $_COOKIE['phpaut']['password']
);
$_SESSION = $session_data;
header('Location: ' . $_SERVER['PHP_SELF']);
} else {
echo 'nessun cookie.
';
}
} else {
echo 'si.
';
}
} else {
// la sessione non è valida
echo 'nessuna sessione.
';
echo 'controllo se esiste il cookie...';
if (isset($_COOKIE['phpaut'])) {
echo 'si. Rigenero la sessione.
';
session_start();
$session_data = array(
'lifetime' => time(),
'username' => $_COOKIE['phpaut']['username'],
'password' => $_COOKIE['phpaut']['password']
);
$_SESSION = $session_data;
header('Location: ' . $_SERVER['PHP_SELF']);
} else {
echo 'nessun cookie.
';
}
}
if (isset($_SESSION['lifetime'])) {
echo 'faccio il refresh della sessione
';
$_SESSION['lifetime'] = time();
}
if (isset($_SESSION['username'])) {
?>
Benvenuto <?php echo $_SESSION['username']; ?></p>
logout
<?php
} else {
if (isset($_GET['action'])) {
echo '
' . $_GET['action'] . '</p>';
}
?>
<form action="transaction.php?action=login" method="post">
<table>
<tr>
<td>username</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>password</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td></td>
<td><input type="checkbox" name="rem" />ricordami</td>
</tr>
<tr>
<td></td>
<td colspan="2"><input type="submit" name="action" value="login" /></td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>
transaction.php
codice:
<?php
session_start();
define('COOKIE_TTL', 120);
echo '<pre>';
print_r($_POST);
echo '</pre>';
$action = isset($_GET['action']) ? $_GET['action'] : '';
switch ($action) {
case 'login':
$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
if (!empty($username) && $username == 'pippo' && !empty($password) && $password == '12345') {
// dati corretti
// creo sessione
$session_data = array(
'lifetime' => time(),
'username' => 'pippo',
'password' => '12345'
);
$_SESSION = $session_data;
// controllo se si preferisce memorizzare le informazioni
if (isset($_POST['rem'])) {
// creo cookie
$cookie_data = array(
'username' => 'pippo',
'password' => '12345'
);
$exp_date = time() + COOKIE_TTL;
setcookie('phpaut[username]', $cookie_data['username'], $exp_date);
setcookie('phpaut[password]', $cookie_data['password'], $exp_date);
}
header('Location: ' . $_SERVER['HTTP_REFERER']);
} else {
// dati errati
header('Location: index.php?action=login_failure');
}
break;
case 'logout':
// distruggo la sessione
unset($_SESSION);
session_destroy();
// rendo scaduti i cookie
setcookie('phpaut[username]', null, time() - COOKIE_TTL);
setcookie('phpaut[password]', null, time() - COOKIE_TTL);
header('Location: index.php');
break;
default:
header('Location: ' . $_SERVER['HTTP_REFERER']);
}
?>
Saluti a tutti