session_start() sends headers to the browser. It has to go before anything else is sent. HTML, blank lines, random garbage, anything. As soon as anything else is sent, the headers are finished with and it's too late to send any more.
If you're using sessions in a page, it's generally good form to put
<?php
session_start();
right at the top of the file (and note the absence of spaces or blank lines before the "<?php".