Следствие присутствия session_start() в начале скрипта таково: если клиент не поддерживает куки, то файл сессии создается
на каждый запрос. А всякие роботы довольно часто куки не поддерживают.
Еще раз —
на каждый запрос робота создается новый файл сессии.
Если у вас сессии хранятся, скажем, 24 минуты (по умолчанию), то это еще не очень сказывается. Но когда вы решите увеличить время хранения сессии до месяца, чтобы пользователя из корзины не выбрасывало, то довольно скоро у вас в tmp/ накопится под миллион файлов. В результате PHP при открытии страницы или очистке мусора будет работать медленно и ощутимо тратить ресурсы сервера.
Поэтому рекомендация такая: храните сессии для пользователей, которые сохраняют ваши куки. Ставим куку, проверяем на следующем запросе, есть ли эта кука, если есть — можно запускать session_start().
Вариант проще, без кук, и будет создаваться еще меньше сессий: создавать сессию только для того, кто авторизовался. То есть, пока не совпал логин и пароль пользователя, не запускаем session_start().
Всякие не очень важные данные, которые вам нужны для всех пользователей (например, город, из которого пришел пользователь), храните в куках.
Если у клиента есть куки с session id, значит клиент залогинен то запускать session_start()
Если куки нет — значит не залогинен, сессию не запускаем.
Если есть куки с ID сессии, значит, вы уже вызвали session_start(), а значит, файл сессии
уже создался. Проверять нунжо как-нибудь по-другому (например, совпадением введенного логина и пароля, как описано выше).