This is exactly what he's telling you. When you have any output (like HTML code, for example), the server sends out HTTP headers to the browser as the "starting point", if you will, of the HTTP transaction.
Lo and behold, 43 lines later (or whatever), you call [man]session_start/man, or [man]setcookie/man, and you get an error that very plainly states "Headers already sent".
Cookies (both COOKIE cookies, and the cookie used for session management [which contains the PHPSESSID]), are sent by the HTTP server with the other header info at the begnning of the HTTP transaction.
And, therefore, you can't have some much as a single text character or even a whitespace up there prior to calling session_start(), or header(), or setcookie()....