Корзина очищается раз в час

Тема в разделе "Общие вопросы", создана пользователем WhiteCoder, 21 мар 2016.

  1. WhiteCoder

    WhiteCoder Новичок

    Сообщения:
    2
    Симпатии:
    0
    Уже блин устал, сменил время жизни сессии где только можно, а она блин очищается ровно через час.

    Что было сделано:

    1. На сервере установлено
    • session.cookie_lifetime 86400;
    • session.gc_maxlifetime 86400;
    2. В php.ini в корневой папке:
    • magic_quotes_gpc = Off;
    • register_globals = Off;
    • default_charset = UTF-8;
    • memory_limit = 1024M;
    • session.cookie_lifetime 86400;
    • session.gc_maxlifetime 86400;
    • php_value session.cache_expire 180;
    • php_value max_execution_time = 36000;
    • upload_max_filesize = 4000M;
    • php_value max_input_vars = 10000;
    • php_value suhosin.request.max_vars = 10000;
    • php_value suhosin.post.max_vars = 10000;
    • safe_mode = Off;
    • mysql.connect_timeout = 20;
    • session.auto_start = Off;
    • session.use_only_cookies = On;
    • session.use_cookies = On;
    • session.use_trans_sid = Off;
    • session.cookie_httponly = On;
    • allow_url_fopen = on;
    3. Изменил файл session.php | вывел в отдельную папку, дал права 700
    Код:
    publicfunction __construct($session_id ='',  $key ='default'){
        if(!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,40}$/', $_COOKIE[session_name()])){
                exit();
            }
    
            if($session_id){
                session_id($session_id);
            }
            session_set_cookie_params(86400,'/');
            ini_set('session.cache_expire','180');
            ini_set('session.gc_maxlifetime','86400');
            session_save_path(realpath(dirname($_SERVER['SCRIPT_FILENAME']).'/session'));
            session_start();
        }
    
        if(!isset($_SESSION[$key])){
            $_SESSION[$key]= array();
        }
    
        $this->data =& $_SESSION[$key];
    }
    4. Установил правило в .htaccess
    # 1.To use URL Alias you need to be running apache with mod_rewrite enabled.

    # 2. In your opencart directory rename htaccess.txt to .htaccess.

    # For any support issues please visit: http://www.opencart.com

    Options +FollowSymlinks

    # Prevent Directoy listing
    Options -Indexes

    # Prevent Direct Access to files
    <FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
    Order deny,allow
    Deny from all
    </FilesMatch>

    # SEO URL Settings
    RewriteEngine On
    # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/

    RewriteBase /
    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

    ### Additional Settings that may need to be enabled for some servers
    ### Uncomment the commands by removing the # sign in front of it.
    ### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.

    # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
    ### php_flag register_globals off

    # 2. If your cart has magic quotes enabled, This may work to disable it:
    ### php_flag magic_quotes_gpc Off

    # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
    ### php_value upload_max_filesize 999M

    # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    ### php_value post_max_size 999M

    ### 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    ### php_value max_execution_time 200

    # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    ### php_value max_input_time 200

    # 7. disable open_basedir limitations
    ### php_admin_value open_basedir none

    php_value session.gc_maxlifetime 86400
    php_value session.cookie_lifetime 86400

    Искал по всей файлам "3600" - везде пусто, нигде не указано. Куда дальше рыть?
     
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.130
    Симпатии:
    999
    начните свой рассказ с указании версии движка.
     
  3. WhiteCoder

    WhiteCoder Новичок

    Сообщения:
    2
    Симпатии:
    0
    Извиняюсь, забыл указать. Версия 2.1.0.1
     
  4. Vlad

    Vlad Эксперт

    Сообщения:
    4.130
    Симпатии:
    999
    \system\library\cart.php

    PHP:
            // Remove all the expired carts with no customer ID
            
    $this->db->query("DELETE FROM " DB_PREFIX "cart WHERE customer_id = '0' AND date_added < DATE_SUB(NOW(), INTERVAL 1 HOUR)");
     
    Вячслав и WhiteCoder нравится это.
  5. multimen

    multimen Новичок

    Сообщения:
    28
    Симпатии:
    2
    Я правильно понял что надо исправить INTERVAL 1 на INTERVAL 24 ?
     
  6. Vlad

    Vlad Эксперт

    Сообщения:
    4.130
    Симпатии:
    999
    да
     
    multimen нравится это.
  7. Вячслав

    Вячслав Новичок

    Сообщения:
    14
    Симпатии:
    0
    А что требуетсяя сделать, чтобы отменить удаление вообще? Только пользователь моежт это сделать ручками.
     
  8. Вячслав

    Вячслав Новичок

    Сообщения:
    14
    Симпатии:
    0
    Подождите. Насколько я вижу из кода, это относится только к незалогиненным пользователям? Сколько товар может находится в корзине неоплаченным у залогиненного пользователя?
     
  9. Vlad

    Vlad Эксперт

    Сообщения:
    4.130
    Симпатии:
    999
    вроде как час после того как отлогинелся с сайта.
     
  10. Вячслав

    Вячслав Новичок

    Сообщения:
    14
    Симпатии:
    0
    ааа... понял. а если требуется оставить там её до тех пор пока смерть не разлучит нас... не то! пока пользователь не удалит сам эту позицию, как будет лучше реализовать это?
     
  11. Vlad

    Vlad Эксперт

    Сообщения:
    4.130
    Симпатии:
    999
    переделать библиотеку. Не смотрел.. нужно попробовать..
     
  12. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Вы забьете таблицу по самое здрасте

    Ну, так изменит в запросе inteкval на удобный вам

    Таблица очищается у неавторизванных пользователей
     
    Вячслав нравится это.
  13. Вячслав

    Вячслав Новичок

    Сообщения:
    14
    Симпатии:
    0
    Проверил, залогинился через более чем часовой интервал. Товар в корзине, Наверно все-таки товар исчезает из корзин незарегистрированных пользователей, к тому же, насколько позволяет мне судить знание английского, этот вариант больше подходит к тому, что прописано в коде.
     
  14. Вячслав

    Вячслав Новичок

    Сообщения:
    14
    Симпатии:
    0
    Именно этого и хотелось бы! Чтобы пользователель мог мониторить изменение цен. и при желании оформлять заказ.
     
  15. Вячслав

    Вячслав Новичок

    Сообщения:
    14
    Симпатии:
    0
    Кстати, напрашивается закономерный вопрос. Возможно ли сделать так, чтобы оформление заказа было избирательным? На данном этапе в корзине заказов оформление идет всем скопом. ЧТо можно сделать, чтобы вставить ыункцию проставления галочек и по ним уже оформляться?
     
  16. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Авторизованый пользователь - нет проблем
    поожил и корзина живет максимально возможное время

    Корзина неавторизованного живет один час, невзирая на настройки длительности сессии.
     
    Вячслав нравится это.
  17. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Монитороть цены?
    проще использовать модуль - СЛЕДИТЬ за ценой
     
    Вячслав нравится это.
  18. Вячслав

    Вячслав Новичок

    Сообщения:
    14
    Симпатии:
    0
    Для пользователя возможно, но цель этих манипуляций - это возможность получения данных о том, что находитсяу пользователя в корзине. Модуль "Следить за ценой" мне как админу даст эту возможность?
     
  19. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Скажем так
    После общения с одним из купивших модуль.
    - Ну и как? Я смотрю что есть подписанты.. Часто меняешь цены?
    - Не, не меняю, но этих пользователей отслеживаю, делаю для них рассылки, предлагаю купоны, смотрю их покупки

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

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

    Конечно, для одноразовых покупок это модуль не интересен.
     
    Вячслав нравится это.
  20. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Есть так же модуль - брошенная корзина
    Его цель как можно раньше получить данные о пользователе о его email или телефоне.
    В работе я его не видел - но цель - та же - статистика и аналитика

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

    У того же человека менеджеры анализируют такие заказы, анализируют причину, перезванивают и т.д.