quello è ovvio, se non usi session_start() l'array superglobale $_SESSION[] non è nemmeno definito... e lo stesso vale per session_id()... l'uid viene assegnato quando solo si apre una sessione altrimenti la var restituita è vuota.