Обработка сеансов для веб-сайта электронной коммерции

Я работаю над веб-сайтом электронной коммерции на PHP, и я хотел бы реализовать следующую функцию: если пользователь не вошел в систему, он может добавлять товары в корзину и по-прежнему иметь эти продукты после входа в систему. Кроме того, функция должна работать наоборот: пользователь авторизуется, а затем добавляет товары в корзину.

Я думал, что хороший способ сделать это — использовать идентификатор сеанса, но после некоторого теста оказалось, что это не лучший способ сделать это.

Любые идеи?


person Psyche    schedule 08.05.2011    source источник


Ответы (2)


Почему использование сеанса не лучший способ сделать это? Я бы сказал, что это так.

У вас может быть отдельная, основанная на сеансе структура корзины покупок без входа в систему, точная копия обычной корзины. Если пользователь не вошел в систему, продукты хранятся там.

Когда пользователь входит в систему, вы объединяете содержимое корзины, не вошедшей в систему, с любыми элементами, которые пользователь может уже иметь в своей пользовательской корзине.

Эта точка также является местом для разрешения любых конфликтов, которые могут возникнуть при выборе продукта (например, выбранный продукт уже присутствует в корзине пользователя, вошедшего в систему).

Использование файлов cookie, рекомендованных @Codemwnci, ​​либо для хранения продуктов, либо для идентификатора корзины, также является хорошей идеей, поскольку это позволяет пользователю вернуться позже и по-прежнему иметь содержимое своей корзины, что вам может понадобиться.

Тот же принцип слияния будет применяться и здесь, с дополнительной проверкой того, действительно ли продукты в файле cookie являются действительными (они могли быть удалены после того, как пользователь сделал свой выбор, или пользователь мог изменить файл cookie).

person Pekka    schedule 08.05.2011
comment
Я говорю, что это не лучший способ сделать это, потому что я уже пробовал. Я использовал идентификатор сеанса в качестве идентификатора, и когда пользователь не вошел в систему, я сохраняю продукты и идентификатор сеанса. После входа в систему я проверяю, совпадает ли идентификатор сеанса, а затем копирую продукты в корзину, в которой зарегистрирован. Все в порядке при первом запуске, но после выхода из системы у меня все тот же идентификатор сеанса. Что не нормально. - person Psyche; 08.05.2011
comment
@Psyche, но почему это проблема? Когда пользователь входит в систему, вы должны сохранить содержимое корзины в данных пользователя, а не в данных сеанса. Идентификатор сеанса сам по себе не должен иметь отношения к содержимому корзины, он может измениться в любое время (например, если изменится браузер или подключение пользователя). Вы делаете session_destroy(), когда пользователь выходит из системы? - person Pekka; 08.05.2011
comment
Ну, на самом деле я делаю $_SESSION = array(); Я думаю, что это проблема. - person Psyche; 08.05.2011
comment
@Psyche да, обязательно используйте session_destroy(). Также уничтожьте файл cookie, как показано в примере здесь: php.net/manual /en/function.session-destroy.php - person Pekka; 08.05.2011

Вы можете использовать файлы cookie. Просто сохраните уникальный идентификатор в файле cookie, который представляет корзину покупок. Независимо от того, вошел ли пользователь в систему или вышел из нее, идентификатор файла cookie останется тем же, поэтому данные будут сохранены.

person Codemwnci    schedule 08.05.2011