Xelen Опубліковано: 31 травня 2018 Share Опубліковано: 31 травня 2018 Хочу посоветоваться со спецами) Купила на opencart.com один модуль я, для доставки. И он конфликтует с симплой, при перезагрузке полей сбрасывается сессия на сайте и в админке. Разработчик того модуля предложил мне решение прописать в в файлах system/config/catalog.php и system/config/admin.php в конце следующую строчку: $_['session_engine'] = 'file'; Вроде теперь не сбрасывает сессии, все работает. Но есть сомнения насчет того, не повлияет ли это на что-либо ещё. Насколько корректно такое решение вопроса? Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 31 травня 2018 Share Опубліковано: 31 травня 2018 10 минут назад, Xelen сказал: Купила на opencart.com один модуль В мусорку такие модули с граблями Не понятно что он там с сессией делает, а на "обработке" сессий построена работа всех кешировщиков и других модулей тоже Это значит модуль своими ошибками мешает работе Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 31 травня 2018 Автор Share Опубліковано: 31 травня 2018 4 минуты назад, markimax сказал: В мусорку такие модули с граблями Не понятно что он там с сессией делает, а на "обработке" сессий построена работа всех кешировщиков и других модулей тоже Это значит модуль своими ошибками мешает работе да мне самой все это не нравится. Но вариантов нет особо по этому вопросу. на стандартном чекауте опенкарт он ничего не сбрасывает, а в симпле именно скрипт перезагрузки полей + этот модуль . вырубают сессию. так понимаю, конфликт скриптов. может есть какой-то вариант заставить скрипты не конфликтовать? не возвращаться же мне к станадартному чекауту) Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 31 травня 2018 Автор Share Опубліковано: 31 травня 2018 дело оказалось не в конфликте скриптов. Там у него способ доставки передает пустое значение отображаясь, в селекте выбора адресов нет даже дефолтного значения -выберите- ( интересно,это может быть причиной сброса сессии?) а скрипт перезагрузки просто показывает то, что уже произошло. Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 13 минут назад, Xelen сказал: может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Повторите вопрос в сессии может храниться информация о shipping_method Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 18 минут назад, chukcha сказал: Повторите вопрос в сессии может храниться информация о shipping_method у меня модуль доставки обнулял сессию из-за слишком большого объема данных. В этом модуле передается список адресов поставщика услуги доставки. сначала перевели сессии на файл, но потом я решила увеличить размер поля в БД Размер поля в БД я увеличила, все работает. Но мне было любопытно, что так забивает сессию, я заглянула в файл иу видела, что помимо данных адресов поставщика, вот таких <option value="omniva.omniva_9946">адрес</option> <option value="omniva.omniva_9902">адрес1</option> <option value="omniva.omniva_9884">адрес2</option> там в конце в поле сессии , где эти адреса, ещё и передается целый скрипт, который прописан в файле модели каталога. этот скрипт отвечает за работу селекта. Я без понятия, должен ли передаваться в сессию Js код? Это корректно? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов 1 Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 2 часа назад, chukcha сказал: Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов А как очищать сессии из БД? Там месяцами накапливаются мегабайты истекших сессий Это как-то удаляется через Опенкарт? Я вижу в файле system/library/session/db.php код public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } только не могу понять, что его запускает? Есть какая-то кнопка? настройка session.gc_maxlifetime = 3600; И то же самое, если сессии переключить на файл public function destroy($session_id) { $file = DIR_SESSION . '/sess_' . basename($session_id); if (is_file($file)) { unset($file); } } Надіслати Поділитися на інших сайтах More sharing options... 1 year later... Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options... Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options... Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Пісочниця Вопос по сесссиям Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
markimax Опубліковано: 31 травня 2018 Share Опубліковано: 31 травня 2018 10 минут назад, Xelen сказал: Купила на opencart.com один модуль В мусорку такие модули с граблями Не понятно что он там с сессией делает, а на "обработке" сессий построена работа всех кешировщиков и других модулей тоже Это значит модуль своими ошибками мешает работе Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 31 травня 2018 Автор Share Опубліковано: 31 травня 2018 4 минуты назад, markimax сказал: В мусорку такие модули с граблями Не понятно что он там с сессией делает, а на "обработке" сессий построена работа всех кешировщиков и других модулей тоже Это значит модуль своими ошибками мешает работе да мне самой все это не нравится. Но вариантов нет особо по этому вопросу. на стандартном чекауте опенкарт он ничего не сбрасывает, а в симпле именно скрипт перезагрузки полей + этот модуль . вырубают сессию. так понимаю, конфликт скриптов. может есть какой-то вариант заставить скрипты не конфликтовать? не возвращаться же мне к станадартному чекауту) Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 31 травня 2018 Автор Share Опубліковано: 31 травня 2018 дело оказалось не в конфликте скриптов. Там у него способ доставки передает пустое значение отображаясь, в селекте выбора адресов нет даже дефолтного значения -выберите- ( интересно,это может быть причиной сброса сессии?) а скрипт перезагрузки просто показывает то, что уже произошло. Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 13 минут назад, Xelen сказал: может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Повторите вопрос в сессии может храниться информация о shipping_method Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 18 минут назад, chukcha сказал: Повторите вопрос в сессии может храниться информация о shipping_method у меня модуль доставки обнулял сессию из-за слишком большого объема данных. В этом модуле передается список адресов поставщика услуги доставки. сначала перевели сессии на файл, но потом я решила увеличить размер поля в БД Размер поля в БД я увеличила, все работает. Но мне было любопытно, что так забивает сессию, я заглянула в файл иу видела, что помимо данных адресов поставщика, вот таких <option value="omniva.omniva_9946">адрес</option> <option value="omniva.omniva_9902">адрес1</option> <option value="omniva.omniva_9884">адрес2</option> там в конце в поле сессии , где эти адреса, ещё и передается целый скрипт, который прописан в файле модели каталога. этот скрипт отвечает за работу селекта. Я без понятия, должен ли передаваться в сессию Js код? Это корректно? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов 1 Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 2 часа назад, chukcha сказал: Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов А как очищать сессии из БД? Там месяцами накапливаются мегабайты истекших сессий Это как-то удаляется через Опенкарт? Я вижу в файле system/library/session/db.php код public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } только не могу понять, что его запускает? Есть какая-то кнопка? настройка session.gc_maxlifetime = 3600; И то же самое, если сессии переключить на файл public function destroy($session_id) { $file = DIR_SESSION . '/sess_' . basename($session_id); if (is_file($file)) { unset($file); } } Надіслати Поділитися на інших сайтах More sharing options... 1 year later... Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options... Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options... Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Пісочниця Вопос по сесссиям Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Xelen Опубліковано: 31 травня 2018 Автор Share Опубліковано: 31 травня 2018 4 минуты назад, markimax сказал: В мусорку такие модули с граблями Не понятно что он там с сессией делает, а на "обработке" сессий построена работа всех кешировщиков и других модулей тоже Это значит модуль своими ошибками мешает работе да мне самой все это не нравится. Но вариантов нет особо по этому вопросу. на стандартном чекауте опенкарт он ничего не сбрасывает, а в симпле именно скрипт перезагрузки полей + этот модуль . вырубают сессию. так понимаю, конфликт скриптов. может есть какой-то вариант заставить скрипты не конфликтовать? не возвращаться же мне к станадартному чекауту) Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 31 травня 2018 Автор Share Опубліковано: 31 травня 2018 дело оказалось не в конфликте скриптов. Там у него способ доставки передает пустое значение отображаясь, в селекте выбора адресов нет даже дефолтного значения -выберите- ( интересно,это может быть причиной сброса сессии?) а скрипт перезагрузки просто показывает то, что уже произошло. Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 13 минут назад, Xelen сказал: может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Повторите вопрос в сессии может храниться информация о shipping_method Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 18 минут назад, chukcha сказал: Повторите вопрос в сессии может храниться информация о shipping_method у меня модуль доставки обнулял сессию из-за слишком большого объема данных. В этом модуле передается список адресов поставщика услуги доставки. сначала перевели сессии на файл, но потом я решила увеличить размер поля в БД Размер поля в БД я увеличила, все работает. Но мне было любопытно, что так забивает сессию, я заглянула в файл иу видела, что помимо данных адресов поставщика, вот таких <option value="omniva.omniva_9946">адрес</option> <option value="omniva.omniva_9902">адрес1</option> <option value="omniva.omniva_9884">адрес2</option> там в конце в поле сессии , где эти адреса, ещё и передается целый скрипт, который прописан в файле модели каталога. этот скрипт отвечает за работу селекта. Я без понятия, должен ли передаваться в сессию Js код? Это корректно? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов 1 Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 2 часа назад, chukcha сказал: Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов А как очищать сессии из БД? Там месяцами накапливаются мегабайты истекших сессий Это как-то удаляется через Опенкарт? Я вижу в файле system/library/session/db.php код public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } только не могу понять, что его запускает? Есть какая-то кнопка? настройка session.gc_maxlifetime = 3600; И то же самое, если сессии переключить на файл public function destroy($session_id) { $file = DIR_SESSION . '/sess_' . basename($session_id); if (is_file($file)) { unset($file); } } Надіслати Поділитися на інших сайтах More sharing options... 1 year later... Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options... Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options... Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Пісочниця Вопос по сесссиям Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Xelen Опубліковано: 31 травня 2018 Автор Share Опубліковано: 31 травня 2018 дело оказалось не в конфликте скриптов. Там у него способ доставки передает пустое значение отображаясь, в селекте выбора адресов нет даже дефолтного значения -выберите- ( интересно,это может быть причиной сброса сессии?) а скрипт перезагрузки просто показывает то, что уже произошло. Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 13 минут назад, Xelen сказал: может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Повторите вопрос в сессии может храниться информация о shipping_method Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 18 минут назад, chukcha сказал: Повторите вопрос в сессии может храниться информация о shipping_method у меня модуль доставки обнулял сессию из-за слишком большого объема данных. В этом модуле передается список адресов поставщика услуги доставки. сначала перевели сессии на файл, но потом я решила увеличить размер поля в БД Размер поля в БД я увеличила, все работает. Но мне было любопытно, что так забивает сессию, я заглянула в файл иу видела, что помимо данных адресов поставщика, вот таких <option value="omniva.omniva_9946">адрес</option> <option value="omniva.omniva_9902">адрес1</option> <option value="omniva.omniva_9884">адрес2</option> там в конце в поле сессии , где эти адреса, ещё и передается целый скрипт, который прописан в файле модели каталога. этот скрипт отвечает за работу селекта. Я без понятия, должен ли передаваться в сессию Js код? Это корректно? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов 1 Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 2 часа назад, chukcha сказал: Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов А как очищать сессии из БД? Там месяцами накапливаются мегабайты истекших сессий Это как-то удаляется через Опенкарт? Я вижу в файле system/library/session/db.php код public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } только не могу понять, что его запускает? Есть какая-то кнопка? настройка session.gc_maxlifetime = 3600; И то же самое, если сессии переключить на файл public function destroy($session_id) { $file = DIR_SESSION . '/sess_' . basename($session_id); if (is_file($file)) { unset($file); } } Надіслати Поділитися на інших сайтах More sharing options... 1 year later... Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options... Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options... Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Пісочниця Вопос по сесссиям Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 13 минут назад, Xelen сказал: может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Повторите вопрос в сессии может храниться информация о shipping_method Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 18 минут назад, chukcha сказал: Повторите вопрос в сессии может храниться информация о shipping_method у меня модуль доставки обнулял сессию из-за слишком большого объема данных. В этом модуле передается список адресов поставщика услуги доставки. сначала перевели сессии на файл, но потом я решила увеличить размер поля в БД Размер поля в БД я увеличила, все работает. Но мне было любопытно, что так забивает сессию, я заглянула в файл иу видела, что помимо данных адресов поставщика, вот таких <option value="omniva.omniva_9946">адрес</option> <option value="omniva.omniva_9902">адрес1</option> <option value="omniva.omniva_9884">адрес2</option> там в конце в поле сессии , где эти адреса, ещё и передается целый скрипт, который прописан в файле модели каталога. этот скрипт отвечает за работу селекта. Я без понятия, должен ли передаваться в сессию Js код? Это корректно? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов 1 Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 2 часа назад, chukcha сказал: Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов А как очищать сессии из БД? Там месяцами накапливаются мегабайты истекших сессий Это как-то удаляется через Опенкарт? Я вижу в файле system/library/session/db.php код public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } только не могу понять, что его запускает? Есть какая-то кнопка? настройка session.gc_maxlifetime = 3600; И то же самое, если сессии переключить на файл public function destroy($session_id) { $file = DIR_SESSION . '/sess_' . basename($session_id); if (is_file($file)) { unset($file); } } Надіслати Поділитися на інших сайтах More sharing options... 1 year later... Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options... Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options... Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Пісочниця Вопос по сесссиям Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 13 минут назад, Xelen сказал: может кто подскажет, в файле или таблице сессий вообще должен храниться скрипт из модели, помимо самой информации из селекта адресов доставки? Повторите вопрос в сессии может храниться информация о shipping_method Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 18 минут назад, chukcha сказал: Повторите вопрос в сессии может храниться информация о shipping_method у меня модуль доставки обнулял сессию из-за слишком большого объема данных. В этом модуле передается список адресов поставщика услуги доставки. сначала перевели сессии на файл, но потом я решила увеличить размер поля в БД Размер поля в БД я увеличила, все работает. Но мне было любопытно, что так забивает сессию, я заглянула в файл иу видела, что помимо данных адресов поставщика, вот таких <option value="omniva.omniva_9946">адрес</option> <option value="omniva.omniva_9902">адрес1</option> <option value="omniva.omniva_9884">адрес2</option> там в конце в поле сессии , где эти адреса, ещё и передается целый скрипт, который прописан в файле модели каталога. этот скрипт отвечает за работу селекта. Я без понятия, должен ли передаваться в сессию Js код? Это корректно? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов 1 Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 2 часа назад, chukcha сказал: Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов А как очищать сессии из БД? Там месяцами накапливаются мегабайты истекших сессий Это как-то удаляется через Опенкарт? Я вижу в файле system/library/session/db.php код public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } только не могу понять, что его запускает? Есть какая-то кнопка? настройка session.gc_maxlifetime = 3600; И то же самое, если сессии переключить на файл public function destroy($session_id) { $file = DIR_SESSION . '/sess_' . basename($session_id); if (is_file($file)) { unset($file); } } Надіслати Поділитися на інших сайтах More sharing options... 1 year later... Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options... Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options... Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Пісочниця Вопос по сесссиям Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 18 минут назад, chukcha сказал: Повторите вопрос в сессии может храниться информация о shipping_method у меня модуль доставки обнулял сессию из-за слишком большого объема данных. В этом модуле передается список адресов поставщика услуги доставки. сначала перевели сессии на файл, но потом я решила увеличить размер поля в БД Размер поля в БД я увеличила, все работает. Но мне было любопытно, что так забивает сессию, я заглянула в файл иу видела, что помимо данных адресов поставщика, вот таких <option value="omniva.omniva_9946">адрес</option> <option value="omniva.omniva_9902">адрес1</option> <option value="omniva.omniva_9884">адрес2</option> там в конце в поле сессии , где эти адреса, ещё и передается целый скрипт, который прописан в файле модели каталога. этот скрипт отвечает за работу селекта. Я без понятия, должен ли передаваться в сессию Js код? Это корректно? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов 1 Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 2 часа назад, chukcha сказал: Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов А как очищать сессии из БД? Там месяцами накапливаются мегабайты истекших сессий Это как-то удаляется через Опенкарт? Я вижу в файле system/library/session/db.php код public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } только не могу понять, что его запускает? Есть какая-то кнопка? настройка session.gc_maxlifetime = 3600; И то же самое, если сессии переключить на файл public function destroy($session_id) { $file = DIR_SESSION . '/sess_' . basename($session_id); if (is_file($file)) { unset($file); } } Надіслати Поділитися на інших сайтах More sharing options... 1 year later... Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options... Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options... Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Пісочниця Вопос по сесссиям Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
chukcha Опубліковано: 2 червня 2018 Share Опубліковано: 2 червня 2018 Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов 1 Надіслати Поділитися на інших сайтах More sharing options... Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 2 часа назад, chukcha сказал: Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов А как очищать сессии из БД? Там месяцами накапливаются мегабайты истекших сессий Это как-то удаляется через Опенкарт? Я вижу в файле system/library/session/db.php код public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } только не могу понять, что его запускает? Есть какая-то кнопка? настройка session.gc_maxlifetime = 3600; И то же самое, если сессии переключить на файл public function destroy($session_id) { $file = DIR_SESSION . '/sess_' . basename($session_id); if (is_file($file)) { unset($file); } } Надіслати Поділитися на інших сайтах More sharing options... 1 year later... Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options... Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options... Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Пісочниця Вопос по сесссиям
Xelen Опубліковано: 2 червня 2018 Автор Share Опубліковано: 2 червня 2018 2 часа назад, chukcha сказал: Да, есть такое, к сожалению, причина - в идеологии оформления заказа опенкарта По сути нужен аякс скрипт для таких селектов А как очищать сессии из БД? Там месяцами накапливаются мегабайты истекших сессий Это как-то удаляется через Опенкарт? Я вижу в файле system/library/session/db.php код public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } только не могу понять, что его запускает? Есть какая-то кнопка? настройка session.gc_maxlifetime = 3600; И то же самое, если сессии переключить на файл public function destroy($session_id) { $file = DIR_SESSION . '/sess_' . basename($session_id); if (is_file($file)) { unset($file); } } Надіслати Поділитися на інших сайтах More sharing options... 1 year later... Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options... Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options... Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
Taaliman Опубліковано: 12 травня 2020 Share Опубліковано: 12 травня 2020 На дворе 2020, а я столкнулся с той же проблемой сессий. Удивляет сам факт, что почти за два года проблему так и не пофиксили. Посмотрел репозиторий opencart-а на github-и вроде бы работа идёт полным ходом, хотя ветка 3.0.x какая-то заброшенная и активно идёт работа над веткой 3.1.x. Не значит ли это, что ветка 3.0.x обречена и все фиксы делаются в 3.1.x? Надіслати Поділитися на інших сайтах More sharing options...
Taaliman Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 По-хорошему, файл system/library/session/db.php должен быть таким: <?php /* CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(32) NOT NULL, `data` mediumtext NOT NULL, `expire` datetime NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; */ namespace Session; final class DB { public $expire = ''; public function __construct($registry) { $this->db = $registry->get('db'); $this->expire = ini_get('session.gc_maxlifetime'); $this->gc(); } public function read($session_id) { $query = $this->db->query("SELECT `data` FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "' AND expire > now()"); if ($query->num_rows) { return json_decode($query->row['data'], true); } else { return false; } } public function write($session_id, $data) { if ($session_id) { $this->db->query("REPLACE INTO `" . DB_PREFIX . "session` SET session_id = '" . $this->db->escape($session_id) . "', `data` = '" . $this->db->escape(json_encode($data)) . "', expire = DATE_ADD(NOW(), INTERVAL " . $this->expire . " SECOND)"); } return true; } public function destroy($session_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE session_id = '" . $this->db->escape($session_id) . "'"); return true; } public function gc() { $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire <= now()"); return true; } } Тут на самом деле три фикса: Более правильная работа с полем expire, используя только возможности MySQL. Для поля data следует использовать гораздо больше, чем 64Кб (т. е. вместо TEXT лучше юзать MEDIUMTEXT, чего вполне должно хватить на все случаи жизни). На практике у меня ломались сессии из-а того, что накапливалось около 1Мб сессионных данных и они тупо не сохранялись из-за чего в магазине происходила мистика. В метод gc() нет необходимости передавать параметр. Обратил внимание, что даже в master-ветке opencart-а на github-е, фиксы какие-то странные. Хотелось бы услышать критику по этим фиксам и может я что-то не учёл. Надіслати Поділитися на інших сайтах More sharing options...
Vetroff Опубліковано: 13 травня 2020 Share Опубліковано: 13 травня 2020 4 часа назад, Taaliman сказал: На дворе 2020, а я столкнулся с той же проблемой сессий. часто решается заменой /system/library/session.php от прошлой версии движка, сам недавно столкнулся. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1
Recommended Posts