What best practices should be followed when designing a user-friendly login system in PHP that involves bookmark links and tokens?

When designing a user-friendly login system in PHP that involves bookmark links and tokens, it is important to ensure that the login process is secure, user-friendly, and efficient. One best practice is to generate unique tokens for each login session to prevent unauthorized access. Additionally, bookmark links should expire after a certain period of time to enhance security. Finally, providing clear error messages and instructions can help users navigate the login process easily.

<?php

// Generate a unique token for each login session
$token = bin2hex(random_bytes(16));

// Store the token in the session or database for verification
$_SESSION['login_token'] = $token;

// Check if the token matches during the login process
if(isset($_POST['login_token']) && $_POST['login_token'] === $_SESSION['login_token']) {
    // Token is valid, proceed with login
    // Clear the token after successful login
    unset($_SESSION['login_token']);
} else {
    // Token is invalid, display an error message
    echo "Invalid token. Please try again.";
}

// Expire bookmark links after a certain period of time
$expiration_time = strtotime($_SESSION['login_time']) + 3600; // 1 hour expiration
if(time() > $expiration_time) {
    // Expired link, display an error message
    echo "Bookmark link has expired. Please request a new one.";
}

?>