Я бы использовал php-шные сессии и нет проблем, но данные находятся на стороне клиента и приходят аяксом от сервера.
Приходит вёрстка со списком ноутбуков и у каждого есть кнопка добавить в сравнение. По клику она должна закидывать ID ноутбука в массив + счётчик на странице "Товаров в сравнении" должен увеличиваться на 1 при каждом добавлении элемента в массив. Но не в этом сложность. Список товаров в сравнении не должен пропадать при переходе на другую страницу. Например на карточку товара. Там тоже есть такая же кнопка Добавить в сравнении + там будет слайдер из похожих ноутбуков у которых тоже есть такая кнопка.
Очищаться список сравнения должен либо по времени - день например, либо по клику Очистить список сравнения.
Реально ли реализовать такое в реалиях js? Я понимаю, что через сессии это делается за 20 минут, но я не могу их использовать
localStorage
Само не удаляется, но вы можете сделать в сохраняемом объекте поле "время", и при получении значения, смотрите, если срок годности истек, не используете и удаляете.
Ну, или кукисы.
Вполне можете при добавлении ноутбука в клиенте отправлять эти данные и на сервер, там хранить в сессии и при загрузке страницы отдавать массив уже отобранных.
Иначе, как уже посоветовали, в localStorage:
// при добавлении ноута в коллекцию
localStorage.setItem('laptops', JSON.stringify( laptopArray ));
// при рендере страницы после перехода
var laptopArray = JSON.parse(localStorage.getItem('laptops')) || [];
Я где то пропустил момент где описывается почему нельзя хранить все это в сессии? Довольно стандартная задача, не требующая каких-либо фантастических технологий. 2 яваскрипта с аяксом и пару строчек на пхп.