Ну, почему бы и нет?
// starts session, sets cookie with session id
session_start();
// outputs Location header
header("Location: somewhere.php");
// rest of code keeps executing!
// sets session value foo
$_SESSION['foo'] = 'bar';
То, что вы выводите заголовок Location
, не означает, что остальная часть сценария не выполняется.
Значение сеанса устанавливается и сохраняется на сервере, это полностью не зависит от того, были ли заголовки уже отправлены или нет. Единственный заголовок, который необходимо отправить клиенту, - это файл cookie, содержащий идентификатор сеанса, это может происходить до или после заполнения значений сеанса в памяти сервера.