Я пытаюсь сделать систему корзины, используя PHP. Моя система корзин позволяет пользователям добавлять товары в свою корзину и сохранять их там без необходимости входа (в качестве гостя), просто ссылаясь на IP-адрес пользователя. Некоторые из вас уже знают, куда это идет.
Теперь давайте рассмотрим, что два разных человека соединяются из одной сети (используя один и тот же IP) на двух разных компьютерах и пытаются зайти в мою корзину. Первый человек добавляет продукт в корзину и думает получить его или нет за ночь.
Пока первый человек думает всю ночь, второй подключается к другому компьютеру (в той же сети) и добавляет товар в корзину. Второй человек понимает, что в корзине есть дополнительный товар, который он не добавил.
Я попытался отделить его, получив внешний ip, а затем используя локальный ip для разделения компьютеров, но это казалось глупым, потому что вы не можете использовать локальный ip, если он не размещен на локальном сервере.
Я не хочу, чтобы клиенты входили в систему перед использованием корзины. Многие сайты электронной коммерции придумали способ, позволяющий клиентам обновлять корзину с нескольких компьютеров в одной сети, при этом ни один из компьютеров не должен мешать результатам друг друга (отображаемые элементы в корзине).
Вы не должны идентифицировать людей по IP-адресу вообще по той причине, которую вы упомянули — несколько пользователей могут быть в одной сети. Вместо этого используйте сессий или же печенье хранить эту информацию. Поскольку вы хотите сохранить эту информацию после того, как пользователь закроет окно браузера, вам следует использовать файлы cookie, поскольку они более постоянны.
Пример того, как хранить данные корзины в файле cookie, может выглядеть примерно так:
<?php
setcookie("cart", "item, another item, yet another item", time()+3600*24*365*10, '/');
?>
Тогда вы можете использовать explode
чтобы получить все предметы.
<?php
foreach (explode(",", $_COOKIE['cart']) as $item) {
echo trim($item); // Will output each item in the cookie cart
}
?>
В качестве альтернативы, если вы хотите сохранить каждый элемент в отдельном файле cookie, вы также можете сделать это следующим образом:
<?php
// It doesn't matter what you name the cookies in this case as you will be looping through all of them, you just need a unique string
setcookie("item 1", "item name 1", time()+3600*24*365*10, '/');
setcookie("item 2", "item name 2", time()+3600*24*365*10, '/');
setcookie("item 3", "item name 3", time()+3600*24*365*10, '/');
// Need page reload to access cookies
foreach ($_COOKIE as $item) {
echo $item;
}
?>
Важное примечание о файлах cookie: вы можете не получить доступ к cookie в то же время, когда вы его устанавливаете; между вами должна быть перезагрузка страницы.
Никогда не используйте ip для идентификации пользователя! Вместо этого используйте куки.