Конечно, править код. Сейчас session_start() выполняется сразу, а надо если логин или если корзина.
Но ч бы ни в коем случае не стал так делать- сессия весит мало, но зато так надежнее.
Где и как запускаются сессии - это нашел, но не совсем понимаю, как нужно прописать условия для запуска.
Я считаю, это отличное решение проблемы с ненужными сессиями от "пауков" и посетителей, которые не выполняют никаких действий на сайте.
Как я понял, технически можно еще сделать так, чтоб сессия не запускалась, если посетитель определяется как бот с помощью HTTP_USER_AGENT. Но в идеале, считаю, что сессии нужны только тем посетителям, которые выполняют действия, а не просто ходят по сайту.
Самое интересное, что при хранении сессий в БД таких проблем, судя по всему, нет. Сессии длятся два часа по умолчанию и удаляются, а корзина/закладки у неавторизованных пользователей хранятся две недели. Хотя могу ошибаться, так как не проверял на практике.