session_start() and $_SESSIONcounter.php Simple visit counter using sessions
login-form.php Complete login flow demonstration
Each HTTP request is independent. The server has no memory of previous requests:
<?php
// Start session - MUST be before any output!
session_start();
// Store data
$_SESSION['user_id'] = 123;
$_SESSION['username'] = 'alice';
// Read data (on subsequent requests)
echo "Hello, " . $_SESSION['username'];
// Check if key exists
if (isset($_SESSION['user_id'])) {
echo "User is logged in";
}
// Remove specific key
unset($_SESSION['temp_data']);
// Destroy entire session (logout)
session_destroy();
?>
session_start() sends a cookie header, so it must be called before ANY output:
// WRONG - whitespace before PHP <?php session_start(); // ERROR! // WRONG - output before session_start <?php echo "Hello"; session_start(); // ERROR! // RIGHT <?php session_start(); echo "Hello";
<?php
// 1. Regenerate ID on login (prevents session fixation)
session_start();
if ($loginSuccessful) {
session_regenerate_id(true);
$_SESSION['user_id'] = $userId;
}
// 2. Set secure cookie parameters
session_set_cookie_params([
'lifetime' => 0, // Session cookie
'path' => '/',
'secure' => true, // HTTPS only
'httponly' => true, // No JavaScript access
'samesite' => 'Lax' // CSRF protection
]);
session_start();
// 3. Proper logout
session_start();
$_SESSION = []; // Clear data
session_destroy(); // Destroy storage
setcookie(session_name(), '', time() - 3600); // Clear cookie
?>
← Previous: Headers & Metadata | Tutorial Home | State Management →