Тот факт, что вы подавляете вывод ошибок из session_start () с символом @, предполагает, что session_start сообщает об ошибках, которые вы игнорируете.
Если он сообщает об ошибках, вы должны посмотреть на ошибку, которую он генерирует, чтобы определить, что не так.
Обычно session_start завершается ошибкой из-за того, что заголовки уже отправлены. Это происходит, если ваш скрипт выводит какой-либо текст до вызова session_start. После отправки заголовков сеанс не может быть запущен, так как это зависит от отправки заголовков.
Исправление для этого - убедиться, что session_start - это первое, что должно произойти в вашем скрипте. Поскольку session_start является первым делом после ваших включений, это означает, что в начале вашего скрипта есть либо пробел, либо пробел или операторы, которые генерируют вывод в включаемых вами скриптах. Вам нужно проверить включенные файлы и исправить любые пробелы (все, что находится за пределами тегов PHP) и убедиться, что они ничего не выводят до тех пор, пока не произойдет session_start.
На заметку, никогда не используйте @ для подавления ошибок. Это кодовый эквивалент выявления потенциально серьезных проблем, которые необходимо решать под ковром.