Are there best practices for ensuring the security of a "Remember Me" function in PHP?

When implementing a "Remember Me" function in PHP, it is important to ensure the security of the feature to prevent unauthorized access to user accounts. One best practice is to generate a unique token for each user session and store it securely in the database. This token should be checked and validated before automatically logging the user in. Additionally, the token should expire after a certain period of time to enhance security.

// Generate a unique token for the user session
$token = bin2hex(random_bytes(16));

// Store the token securely in the database
$query = "INSERT INTO remember_me_tokens (user_id, token, expiration_date) VALUES (?, ?, ?)";
$stmt = $pdo->prepare($query);
$stmt->execute([$user_id, $token, date('Y-m-d H:i:s', strtotime('+1 week'))]);

// Validate the token before automatically logging the user in
$token = $_COOKIE['remember_me_token'];
$query = "SELECT user_id FROM remember_me_tokens WHERE token = ? AND expiration_date > NOW()";
$stmt = $pdo->prepare($query);
$stmt->execute([$token]);

if ($stmt->rowCount() > 0) {
    // Log the user in
    $user_id = $stmt->fetchColumn();
    $_SESSION['user_id'] = $user_id;
}