Det fjerner ikke din fejl, men skjuler den blot. Fejlen ligger i at "headers already sent", det vil altså sige at der er udskrevet noget inden du skriver session_start().
Som regel ved disse fejl er der tale om et simpelt mellemrum før <?php tegnene - hvilket fejlbeskeden også antyder idet det sker på linje 1 i din fil.
Hvis man har flere filer og ikke kalder session_start() i den første, men i en man include()'er kan funktionen ob_start() som du selv skriver være brugbar. Eksempel:
index.php
<?php
// Output ikke indhold med det samme, men vent
// til vi kalder ob_end_flush() eller lign. Herved virker
// funktioner såsom header(), setcookie(), session_start() m.fl.
ob_start();
// Include() dine filer. Hvad de indeholder er
// sådan set underordnet
include 'funktioner.php';
include 'session.php';
// Send output til browseren. Kaldes automatisk når dit script,
// er færdigt. Det er dog god skik selv at kalde den
ob_end_flush();
?>
session.php
<?php
// Vi kan godt have mellemrum inden <?php da vi
// tidligere har kaldt ob_start()
session_start();
?>
Her er der altså tale om at ob_start() kaldens INDEN der sendes noget output til browseren, såsom det mellemrum du sandsynligvis har. Med den kode du bruger fra #1, skjuler du blot fejlmeddelelsen med @-tegnet. Derfor burde dine sessions stadigvæk ikke virke, men det kan jo også være, at du ubevidst har fået slettet det mellemrum.