In PHP, what are some recommended methods for handling user activation through registration confirmation links?

When a user registers on a website, it is common practice to send a confirmation email with a unique activation link to verify their email address and activate their account. To handle user activation through registration confirmation links in PHP, you can generate a unique activation token, store it in the database along with the user's information, and then send an email with a link containing this token. When the user clicks on the link, you can verify the token and activate the user's account.

// Generate a unique activation token
$activation_token = bin2hex(random_bytes(16));

// Store the activation token in the database along with user information
$stmt = $pdo->prepare("INSERT INTO users (email, activation_token) VALUES (:email, :activation_token)");
$stmt->bindParam(':email', $email);
$stmt->bindParam(':activation_token', $activation_token);
$stmt->execute();

// Send an email with the activation link
$activation_link = "http://example.com/activate.php?token=" . $activation_token;
$message = "Click on the following link to activate your account: " . $activation_link;
mail($email, 'Account Activation', $message);
```

In the `activate.php` file, you can verify the activation token and activate the user's account:

```php
// Verify the activation token
$token = $_GET['token'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE activation_token = :token");
$stmt->bindParam(':token', $token);
$stmt->execute();
$user = $stmt->fetch();

if ($user) {
    // Activate the user's account
    $stmt = $pdo->prepare("UPDATE users SET activated = 1 WHERE id = :id");
    $stmt->bindParam(':id', $user['id']);
    $stmt->execute();

    echo "Your account has been activated successfully!";
} else {
    echo "Invalid activation token!";
}