ob_start() non è un metodo non pulito, semplicemente non è molto conosciuto ma come vedi è molto utile. Senza questa istruzione avresti dovuto dividere il tuo script in almeno due pagine. Ad ogni modo i miei consigli sono:
1. Se con ob_start() funziona tutto allora usalo tranquillamente.
2. Se con ob_start() hai ancora problemi, dividi lo script in più pagine.
L'istruzione unset() distrugge una variabile e dato che un cookie non è una variabile bensì un vero e proprio file l'istruzione unset non serve a niente, ma per distruggerli bisogna o fare come hai fatto tu, cioè settarli "vuoti" oppure settarli nel passato, cioèCodice PHP:
setcookie ("login", "", time() - 3600);