13.01.2016, 16:04
|
Интересующийся
|
|
Регистрация: 03.01.2016
Сообщений: 12
|
|
Cookie, localStorage как сделать корзину?
Добрый день, никак не могу разобраться как мне решить задачу, необходимо сделать что-то типо корзины товаров, но так что бы добавил товаров в корзину, перешел на другую страницу, а корзина с твоими товарами за тобой бегает и товары оттуда никуда не деваются, я пробовал Cookie, пробовал localStorage Вот тут даже пример есть http://incode.pro/javascript/sozdaem...alstorage.html
Но во всех вариантах, как только обновишь страницу или перейдешь на другую все данные из корзины пропадают, все Cookie очищаются и там уже нет ранее добавленных переменных, я думал каждое добавление товара записывать в файл с названием ввиде IP пользователя и потом при загрузке страницы читать этот файл и добавлять все товары обратно в корзину, так JavaScript не может ни создавать, ни записывать в файл ничего.
|
|
13.01.2016, 16:52
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Товар добавляется в корзину через сервер, то есть сервер должен знать об этом событии в любом случае, а значит и может их хранить у себя и выводить корзину на любой странице, а также записать и в Cookie клиенту, если надо. В localStorage может записать только клиент. Если у вас не сохраняется, значит не верно делалось. Код бы свой показали.
|
|
13.01.2016, 22:55
|
Интересующийся
|
|
Регистрация: 26.11.2015
Сообщений: 28
|
|
Я тоже сейчас над такой темой бьюсь. Я на jQuery делаю быструю корзину в определенном блоке на странице, чтоб без перезагрузки и делаю отдельную страницу корзины где уже просто PHP генерит.
Делаю файл обработчик, который срабатывает при нажатии "в корзину". Передается id товара и еще некоторые параметры с помощью ajax и в обработчике происходит выборка из БД и создание json. Json возвращается обратно в js и записывается в sessionStorage, а затем проверка по id на предмет повторений товаров и формирует быструю корзину. В обработчике данные остаются для последующего отображения на полноценной странице корзины.
Я примерно так придумал. Немного тов. Lemme помогает.
Последний раз редактировалось melst, 13.01.2016 в 23:00.
|
|
14.01.2016, 11:34
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от melst
|
а затем проверка по id на предмет повторений товаров и формирует быструю корзину
|
О какой проверке речь и что значит "быстрая корзина"?
|
|
14.01.2016, 16:49
|
Интересующийся
|
|
Регистрация: 03.01.2016
Сообщений: 12
|
|
Сообщение от laimas
|
Товар добавляется в корзину через сервер, то есть сервер должен знать об этом событии в любом случае, а значит и может их хранить у себя и выводить корзину на любой странице, а также записать и в Cookie клиенту, если надо. В localStorage может записать только клиент. Если у вас не сохраняется, значит не верно делалось. Код бы свой показали.
|
http://incode.pro/javascript/sozdaem...alstorage.html
Так я вот это скопировал для примера
Или вот пытался пробовать
<a href="" onclick=setCookie("lastname", "Катя");>КУК</a>
<a href="#" onclick=getcook();>||| Получить</a>
-----
function getcook()
{
alert(document.cookie);
}
//Установить Cookie
function setCookie(name, value) {
document.cookie = name + "=" + value;
}
Кнопочкой КУК устанавливаю Cookie но если страницу обновить то тут же все исчезает. Видимо я как-то неправильно понял работу Cookie
|
|
14.01.2016, 17:00
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
https://learn.javascript.ru/cookie
Но зачем именно куки? Если они устанавливаются только с параметром name, то это будут сессионные куки, которые не будут сохранены браузером после закрытия страницы. С тем же успехом сервер в свою сессию может записать данные корзины и выводить ее на страницах, ведь страницы все равно формирует он.
Другое дело, что куки используются для того, чтобы пользователь мог продолжить набор в корзину, спустя время, но тогда нужно устанавливать не сессионные куки.
|
|
14.01.2016, 21:48
|
Интересующийся
|
|
Регистрация: 26.11.2015
Сообщений: 28
|
|
Сообщение от laimas
|
О какой проверке речь и что значит "быстрая корзина"?
|
)) "быстрая корзина" это я так обозвал блок где появляются товары без перезагрузки страницы, т.е. не основная страница корзины.
Проверку вот уже думаю делать когда данные в обработчик PHP поступают или в скрипте, когда данные назад приходят. Но при таком раскладе при создании основной страницы корзины опять проверка нужна будет. Сама проверка состоит в проверке повторений id.
В обработчике так записываю id каждого товара.
session_start();
if (!isset($_SESSION['id'])) {
$_SESSION['id'] = array();
}
array_push($_SESSION['id'], $id);
Кстати, я заметил, что $_SESSION и sessionStorage по разному избавляются от данных. Первое хранилище только по закрытию браузера, а второе по закрытию вкладки. Правильно?
PS Надо тоже об КУКАХ задуматься.
Последний раз редактировалось melst, 14.01.2016 в 21:54.
|
|
15.01.2016, 06:34
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
$_SESSION не избавляется от данных, это просто суперглобальный массив. Избавиться от данных в нем, это только выполнить такую операцию. Что касается жизни сессии, то по умолчанию она равна 24 минутам, но это не означает, что именно по истечении этого времени ее не будет, она умрет, да, но сборщик мусора не обязательно удалит ее, он работает по своему алгоритму.
Как поступает браузер с файлом своей не знаю, да это и не важно. Гораздо важнее, что нет смысла использовать сессию на сервере и на клиенте, вы ведь ни в чем не выигрываете в этом случае. Более того, добавление товара, это обязательно хотя бы элементарная проверка его наличия, то есть это запрос сервера, серверу и хранить корзину. А учитывая, что у корзины два представления, и если речь идет о кратком ее представлении, и добавление товаров, это асинхронные запросы, то ответ сервера должен содержать информацию об этом представлении, которое нужно оперативно обновлять на клиенте. Все, больше клиенту ничего не надо.
Полное представление корзины, это вообще может быть отдельная страница, ибо может заключать в себе массу операций над товарами корзины. Но в данном случае также как и в первом - клиент это всего лишь интерфейс и взаимодействие с сервером, а корзина как была на сервере, так и есть там.
|
|
15.01.2016, 09:18
|
Интересующийся
|
|
Регистрация: 26.11.2015
Сообщений: 28
|
|
Сообщение от laimas
|
А учитывая, что у корзины два представления, и если речь идет о кратком ее представлении, и добавление товаров, это асинхронные запросы, то ответ сервера должен содержать информацию об этом представлении, которое нужно оперативно обновлять на клиенте. Все, больше клиенту ничего не надо.
|
А как быть с данными которые получены асинхронно при обновлении страницы или переходе на другую? Я sessionStorage только для этого использую. Если просто переход без добавления товара , то корзина берется из сессии клиента, если опять добавляется товар, то делается запрос. Как сделать по-другому я пока не знаю. Если только каждый раз запросы делать.
|
|
15.01.2016, 09:23
|
Интересующийся
|
|
Регистрация: 03.01.2016
Сообщений: 12
|
|
Сообщение от laimas
|
https://learn.javascript.ru/cookie
Но зачем именно куки? Если они устанавливаются только с параметром name, то это будут сессионные куки, которые не будут сохранены браузером после закрытия страницы. С тем же успехом сервер в свою сессию может записать данные корзины и выводить ее на страницах, ведь страницы все равно формирует он.
Другое дело, что куки используются для того, чтобы пользователь мог продолжить набор в корзину, спустя время, но тогда нужно устанавливать не сессионные куки.
|
а мне как раз нужно что-то, что сохранялось бы при обновлении страницы и при переходе на другую страницу, что бы я мог таскать список товаров за пользователем, я новичек и книжку по JavaScript только начал читать, а задачу мне срочно нужно как-то решить. Потому что срок пробной версии Битрикса заканчивается через 4 дня и если я не успею клиенту показать рабочий вариант, то он не оплатит Битрикс. И тогда месяц работы коту под хвост. Вот я и прошу помощи, потомучто самостоятельно я никак не успеваю разобраться.
|
|
|
|