Перейти к содержанию
gregoro

Увеличить время, которое товары хранятся в корзине

Рекомендуемые сообщения

Добрый день!

 

Подскажите, пожалуйста, как можно увеличить время, которое товары хранятся в корзине пользователя?

 

Сейчас сидел настраивал дизайн оформления заказа - минут через 30 корзина просто опустела автоматически.

Проверил еще раз - просто оставил, подошел через 30 - снова пуста...

Некоторым пользователям это может быть очень неудобно.

 

Где выставляется это время?

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нюансов много, каждому свое помогает. Надо пробовать, начать с файла system\library\session.php:

session_set_cookie_params(0, '/');

заменить на:

session_set_cookie_params(86400, '/');

Или прямо в начало index.php добавить:

ini_set('session.gc_maxlifetime', 86400); 
ini_set('session.cookie_lifetime', 86400);

А там уже смотреть - помогает, не помогает.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помог метод отсюда

http://loco.ru/materials/229-php-prolong-session-time

 

У меня шаред-хостинг. Написал хостеру с вопросом могу ли я менять php.ini

Он сказал, что нет. Отправил вносить правки в htaccess 

Я создал папку для хранения сессий вот по этой инструкции  https://webhost1.ru/help/generic/htaccess/session

 

Вроде как помогло.

Не разобрался там только с последним абзацем, вообще не стал его вносить - посмотрим что будет

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Указание

 

session_set_cookie_params(2592000, '/');

 

Привело к тому, что у корзины наступила мгновенная амнезия.

 

Сделал вот это через HTACCESS https://webhost1.ru/help/generic/htaccess/session

 

Буду посмотреть что будет, так как php.ini недоступен напрямую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Увы, htaccess не помог. Видимо, в php передаются не все переменные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На самом деле переменные прекрасно передаются и видны в PHP Local, но магазин на это никак не реагирует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ооочень странно, но ничего не помогает.

 

В итоге дошел до правки sessions.php, но при такой конфигурации у корзины вообще нет памяти:

		if ($this->adaptor && !session_id()) {
			ini_set('session.use_only_cookies', 'Off');
			ini_set('session.use_cookies', 'On');
			ini_set('session.use_trans_sid', 'Off');
			ini_set('session.cookie_httponly', 'On');
		
			if (isset($_COOKIE[session_name()]) && !preg_match('/^[a-zA-Z0-9,\-]{22,52}$/', $_COOKIE[session_name()])) {
				exit('Error: Invalid session ID!');
			}
			
            session_set_cookie_params(86400, '/');
            ini_set('session.cache_expire', '180');
            ini_set('session.gc_maxlifetime', '86400');
            ini_set('session.save_path','/home/account123/public_html/php-sessions');
 
            session_start();
Изменено пользователем EIKA

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

phpinfo:

post-715168-0-82698100-1474134085_thumb.png

Изменено пользователем EIKA

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто на 2.3 смог сделать? У меня не работают никакие методы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто-то еще подключится к проблеме?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогли на форуме OCR. Решение очень простое и кроется в файле \system\library\cart.php

$this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE customer_id = '0' AND date_added < DATE_SUB(NOW(), INTERVAL 1 HOUR)");

Меняем, например, на:

$this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE customer_id = '0' AND date_added < DATE_SUB(NOW(), INTERVAL 1 DAY)");

Более ничего в PHP-файлах менять не нужно. В htaccess переменные на всякий случай оставил.

 

Корзина лежит уже 5 часов.

 

Ура!

Изменено пользователем EIKA
  • +1 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну я и ваш метод уже использовал, и все вышеперечисленные)

И папка для сессий специальная задана, и время сессии на сутки установлено.

Вроде тоже работает. Что именно помогло - не знаю :-)

Вы бы кстати перерегистрировались на форуме. Я не знаю, чем вы так людей разозлили, но с репутацией минус 21 вам вряд ли кто-то вообще отвечать будет :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего страшного, так даже интереснее. А работает из всех методов только INTERVAL 1 DAY, и иначе быть не может. Так как это команда на принудительную очистку. К переменным отношения не имеет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работает отлично, товары лежат уже вторые сутки...

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогли на форуме OCR. Решение очень простое и кроется в файле \system\library\cart.php

$this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE customer_id = '0' AND date_added < DATE_SUB(NOW(), INTERVAL 1 HOUR)");

Меняем, например, на:

$this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE customer_id = '0' AND date_added < DATE_SUB(NOW(), INTERVAL 1 DAY)");

Более ничего в PHP-файлах менять не нужно. В htaccess переменные на всякий случай оставил.

 

Корзина лежит уже 5 часов.

 

Ура!

 

Этот способ затрагивает только корзину незалогиненых покупателей?

Для какой версии Опенкарта, на 2,1,0,1 будет работать?

И еще вопрос, если сессия настроена на жизнь в 5 часов, сколько будет жить корзина?

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тепаерь я сама с собой поговорю...

Что будет если закоментировать эту

$this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE customer_id = '0' AND date_added < DATE_SUB(NOW(), INTERVAL 1 DAY)");

строку?

 

корзина у незалогиненых будет жить вечно? кстати, корзина в куках живет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С этой настройкой надо аккуратнее, по крайней мере, правильно настроить чистильщик сессий. Я натравил на сайт валидатор URL и там создалось 18 тысяч файлов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Настроил чистку сессий на вероятность 10%.

 

php_value session.gc_probability 10
php_value session.gc_divisor 1
 
Правильно ли я понимаю, что при создании каждой 10ой созданной сессию чистильщик будет проверять, не пора ли грохать первую (самую старую)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С этой настройкой надо аккуратнее, по крайней мере, правильно настроить чистильщик сессий. Я натравил на сайт валидатор URL и там создалось 18 тысяч файлов.

Вы про какую настройку? Если про время сессий то да, при большом трафике будет много файлов, а если про INTERVAL 1 DAY то оно файлов не создает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня INTERVAL 7 DAYS, допустим. И без трафика на сайте (просто я его пилю + сканирование Кричащей лягушкой) у меня 10 тысяч сессий за 3 дня. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.