Вы говорите о контейнерах J2EE? Я думаю, что отчасти причина в том, что HTTP не имеет состояния.
Все понятие сеанса - это абстракция, которая позволяет вам делать более интересные вещи через HTTP как последовательность взаимодействий (например, корзина покупок). Таким образом, сессии имеют уникальный идентификатор.
Несмотря на то, что на один IP-адрес обычно приходится один сеанс, нередко бывает, что несколько сеансов с одного IP-адреса (например, представьте, что вы вошли в систему несколько раз в gmail), некоторые IP-адреса скрыты, и это даже возможно изменить свой IP-адрес во время сеанса и использовать файлы cookie или клиентскую память для сохранения идентификатора сеанса.