Забудь про $_SESSION и глобальные переменные — Laravel делает всё через фасад Session или объект запроса. Сессии просты, но если ими не пользоваться правильно, можно нагородить костылей.

Создание сессии

// Через метод put Session::put('username', 'JohnDoe');

// Через массив session(['username' => 'JohnDoe']);

Просто. Данные сохраняются и доступны между запросами.

Получение данных

$username = Session::get('username', 'Guest');

Если в сессии нет username — вернётся 'Guest'. Не нужно лишних проверок.

Проверка и удаление

if (Session::has('username')) {
    // Пользователь залогинен
}

// Удаляем конкретное значение Session::forget('username');

// Удаляем всё Session::flush();

forget и flush — это как швабра для мусора в сессии.

Использование в контроллерах

В контроллерах удобнее через объект запроса:

public function store(Request $request)
{
    // Сохраняем данные
    $request->session()->put('username', 'JohnDoe');

    // Получаем данные
    $username = $request->session()->get('username', 'Guest');
}

Так проще тестировать и не дергать фасад глобально.

Заключение

Сессии в Laravel — это удобно, быстро и понятно. Главное — не хранить в них лишнее и использовать правильно: put/forget/get, и всё будет работать.