Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


gregoro

Recommended Posts

Добрый день!

 

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

 

Сейчас сидел настраивал дизайн оформления заказа - минут через 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 недоступен напрямую.

Надіслати
Поділитися на інших сайтах


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

 

В итоге дошел до правки 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
Надіслати
Поділитися на інших сайтах


Помогли на форуме 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 4
Надіслати
Поділитися на інших сайтах


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

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

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

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

Надіслати
Поділитися на інших сайтах


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

  • +1 1
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Помогли на форуме 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 то оно файлов не создает

Надіслати
Поділитися на інших сайтах


  • 2 years later...
On 9/22/2016 at 2:33 AM, EIKA said:

Помогли на форуме 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 часов.

 

Ура!

Благодарю!!! Респект автору поста!

  • +1 1
Надіслати
Поділитися на інших сайтах


  • 5 months later...
В ‎22‎.‎09‎.‎2016 в 02:33, EIKA сказал:

Помогли на форуме 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 часов.

 

Ура!

Кто-нибудь выявил влияние такой правки на скорость загрузки страниц например?
Не утяжеляет эта штука?

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.