Jump to content
  • 0

Как сделать скрипт добавления в корзину для интернет-магазина


kvant
 Share

Question

Обычно скрипт добавления в корзину работает через механизм сессий php, сохраняя то, что пользователь добавил в корзину. Но такой способ применим тогда, когда количество добавляемых позиций не велико, в противном случае на добавление всех позиций может уйти много времени и сессия php автоматически закроется.

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

Какие существуют способы решения данной проблемы?

Link to comment
Share on other sites

Recommended Posts

  • 0

Писать не в сессию, а в базу.

В куках может лежать только идентификатор пользователя, не обязательно туда все товары совать.

rus но можно что-то написать или руками, удалять таблицы с покупками.

Раз в сутки запускать чистку устаревших

А чем это будет отличаться от существующего механизма сессий? Сессии, насколько я знаю, в базе тоже могут сохраняться. Проще уж тогда, как сказал rus, время жизни сессии увеличить.

Хотелось бы вообще корзину на сервер не передавать, а хранить на клиенте, но в этом случае, разве что, на AJAX весь магазин переписать, иначе после обновления страницы данные сбрасываются. В куках сохранять корзину не вариант - позиций много.

Похоже кроме как увеличить время жизни сессии способа нет.

Link to comment
Share on other sites

  • 0

А чем это будет отличаться от существующего механизма сессий? Сессии, насколько я знаю, в базе тоже могут сохраняться. Проще уж тогда, как сказал rus, время жизни сессии увеличить.

Хотелось бы вообще корзину на сервер не передавать, а хранить на клиенте, но в этом случае, разве что, на AJAX весь магазин переписать, иначе после обновления страницы данные сбрасываются. В куках сохранять корзину не вариант - позиций много.

Похоже кроме как увеличить время жизни сессии способа нет.

В куках хранить идентификатор для аутенификации пользователя, а товар в таблице id-пользователя | товар_в_корзине (соответственно в козине строчка вида, например: id_товара*кол-во;id_товара*кол-во;id_товара*кол-во; ... и т.д. ) сколько пользователей стока и строк в таблице.

Обновлять такое поле проблем особых не создаёт и хлама я не вижу, предварительная регистрация снизит кол-во хламных строк.

И не надо никуда лесть в настройки сервера для увеличения времени сесси, для подтверждения что это всё ещё вы - есть куки. А аякс это уже удобства которые к концепции вопроса не относятся и не решают поставленную задачу, а делают решение более привлекательным

Link to comment
Share on other sites

  • 0

LunatiK так же можно вместо папки /tmp где хранятся все сессии клиентов, указать попробовать другую, свою папку и так же чистить ее с какой-то переодичностью == вариант с бд.

ini_set('session.save_path', $_SERVER['DOCUMENT_ROOT'] .'../sessions/');
ini_set('session.gc_maxlifetime', 120960);
ini_set('session.cookie_lifetime', 120960);

Link to comment
Share on other sites

  • 0

LunatiK так же можно вместо папки /tmp где хранятся все сессии клиентов, указать попробовать другую, свою папку и так же чистить ее с какой-то переодичностью == вариант с бд.

сумашествие, да и потом , чистить то зачем? тут задача наоборот чтоб хранилось.

Ну и к слову, не у всех ini_set() работает

Link to comment
Share on other sites

  • 0

сумашествие, да и потом , чистить то зачем? тут задача наоборот чтоб хранилось.

Ну и к слову, не у всех ini_set() работает

чистить что бы не было хлама, т.е. удалять старые сессии.

почему сумасшествие, поясни пожалуйста?

для чего ini_set() отключают?

Link to comment
Share on other sites

  • 0

чистить что бы не было хлама, т.е. удалять старые сессии.

Они том вечно не хранятся, пускай за это сервер отвечает

почему сумасшествие, поясни пожалуйста?

потомучто безсмысленно и безполезно.

для чего ini_set() отключают?

Дабы пользователи не лезли в настройки настроенного сервера, например если это хостинг и на одном сервере несколько клиентов хостяца, ресурсы общие. дальше сам додумаешь.

Link to comment
Share on other sites

  • 0

ini_set - это слишком. Если уж менять параметры сессии, то через htaccess, чтобы другим не мешать.

Кстати, про сохранение корзины в БД - это мысль. Можно сразу складывать то, что выбрал пользователь в таблицу заказов, а потом, когда он подтвердит отправку заказа, просто менять статус строк. Строки у которых статус долго не менялся периодически чистить. Как-то так, надо еще подумать по этому поводу

Link to comment
Share on other sites

  • 0

Они том вечно не хранятся, пускай за это сервер отвечае

Дабы пользователи не лезли в настройки настроенного сервера, например если это хостинг и на одном сервере несколько клиентов хостяца, ресурсы общие. дальше сам додумаешь.

Ты переназначаешь на свою папку и чистишь ее сам.

Ну тут да, согласен, ресурсы, они не бесконечны.

Link to comment
Share on other sites

  • 0

А вот так разве нельзя:


php_value session.gc_maxlifetime 10800
php_value session.cookie_lifetime 10800

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

Link to comment
Share on other sites

  • 0

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

Да, вы правы, но что мешает указать другую папку для хранения сессий. То, что можно сделать с помощью ini_set, можно сделать и с помощью php_value в .htaccess. Я не прав?

Link to comment
Share on other sites

  • 0

Да, вы правы, но что мешает указать другую папку для хранения сессий. То, что можно сделать с помощью ini_set, можно сделать и с помощью php_value в .htaccess. Я не прав?

сам не пробовал, но говорят что вроде как можно, да.

Link to comment
Share on other sites

  • 0

Совсем очищается? А если она (сессия) только что создана?

ну там смысл походу таков, пока ты не обращаешься 26 мин. к серверу (не посылаешь запрос, бездействуешь), то сессия удаляется.

Edited by rus
Link to comment
Share on other sites

  • 0

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

Хранить там можно только id продукта и количество в корзине.

Автору поста, советую почитать уроки о создании интернет магазина на php.

Конкретно вот этот урок №3: Корзина для интернет магазина php

:blush:

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy