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

Приветствую!

Используем мобильное приложение на базе от разработчиков Cart Power. Столкнулись с проблемой:
покупателей «выкидывает» из учетной записи каждые 7 дней, приходится авторизовываться заново. Покупатели жалуются на неудобство.

Разработчики приложения ответили, что это «ограничение ядра CS-Cart, токен живет менее 2 недель, и нужно править ядро».

Задача: Увеличить срок жизни авторизации до 1 месяца (30 дней). Онлайн-оплат и карт в приложении нет, поэтому вопрос безопасности стоит не так остро, как вопрос удобства.

Подскажите пожалуйста что где и как править?

Спасибо!

Чтото они прям напугали правкой ядра.

Откройте config.php

defined('COOKIE_ALIVE_TIME') or define('COOKIE_ALIVE_TIME', SECONDS_IN_DAY * 7); // one week

Вот тут поставьте вместо 7 - 30 например. Ну и понятно, что при обновлении надо снова вернуть будет.

1 лайк

Сделал, спасибо большое!

Проверю, на 8й день если не вернусь значит работает все :slightly_smiling_face:

1 лайк

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

Да, было бы круто сделать один раз и забыть.
Я так мучаюсь каждый раз после обновления cs-cart, лого когда гружу в svg и правлю коды.

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

Еще раз спасибо вам!

Попросите кого нибудь, кто вам с форума помогает.

Пошагово - в функции логина есть хуки, надо куку логина в хуке повторно поставить на 30 дней. Просто переопределить. И наверно в сохранении корзины было бы неплохо это сделать.

Спасибо!
Да, корзина и избранное, было бы не плохо.
Да, есть такой человек @alex_vp всегда выручает :upside_down_face:

1 лайк

Пообщался и с ИИ вот что говорит

Ваш советник на форуме прав лишь отчасти. Изменение константы COOKIE_ALIVE_TIME в config.php действительно влияет на сессии в браузере, но для мобильного приложения этого может быть недостаточно, так как API работает иначе.

Вот как решить задачу полностью:

  1. Изменение в config.php (то, что вам уже посоветовали)

Это «фундамент». Найдите строку и замените число:

php

defined('COOKIE_ALIVE_TIME') or define('COOKIE_ALIVE_TIME', SECONDS_IN_DAY * 30);

Используйте код с осторожностью.

Это заставит CS-Cart считать сессию валидной 30 дней на уровне системы.

  1. Время жизни API-токена (Важно для приложения)

Приложение от Cart Power обычно использует API. У CS-Cart есть параметр, который принудительно обнуляет токены.
Чтобы настройки применились к API, проверьте настройки в панели администратора:

  1. Перейдите в Настройки → Безопасность.

  2. Найдите пункт «Время жизни сессии администратора/пользователя».

  3. Убедитесь, что там стоит значение, соответствующее вашим 30 дням (в секундах).

  4. Проблема «правки ядра»

Разработчики Cart Power упомянули «правку ядра», потому что в старых версиях CS-Cart время жизни токена API могло быть жестко прописано в коде контроллеров авторизации.

Как сделать правильно (без потери при обновлении):
Вместо того чтобы просто менять config.php, лучше создать маленький модуль (аддон) или использовать local_conf.php.

  1. Создайте в корне сайта файл local_conf.php (если его нет).
  2. Пропишите ту же строку туда:

php

<?php
define('COOKIE_ALIVE_TIME', 2592000); // 30 дней в секундах

Используйте код с осторожностью.

3.Этот файл не затирается при обновлении движка.*

Вот это я делал, меня также выбило на 8 день

define(‘COOKIE_ALIVE_TIME’, 2592000); // 30 дней в секундах

пункты 1 и 2 также не нашел в админ панели )

1 лайк

что бы при обновлениях не сносились настроки, нужно все заносить в config.local.php.

define(‘SESSION_ALIVE_TIME’, SECONDS_IN_HOUR * 720); // 30 дней
define(‘SESSIONS_STORAGE_ALIVE_TIME’, SECONDS_IN_HOUR * 720); // 30 дней
define(‘COOKIE_ALIVE_TIME’, SECONDS_IN_HOUR * 720); // 30 дней

SESSIONS_STORAGE_ALIVE_TIME - корзины гостей

1 лайк

Но почему то после обновления до CS-Cart MV 4.20 , происходит разлогон с админки. Хотя раньше такого не было и сессия держалась указанное время в конфиге.

Что касается приложения, то такое чувство, что оно живет своей жизнью, вообще не понятно сколько сессия держится.

1 лайк

Все равно разлогинил, не работает к сожалению данное решение.

Привет. Нужно делать JWT, как у банков всяких и озонов.

А зч что отвечает переменная

defined(‘SESSION_ALIVE_TIME’) or define(‘SESSION_ALIVE_TIME’, SECONDS_IN_HOUR * 2); // 2 hours

А то есть еще и

defined(‘COOKIE_ALIVE_TIME’) or define(‘COOKIE_ALIVE_TIME’, SECONDS_IN_DAY * 7 ); // 1 week

/app/functions/fn.users.php

поменяйте

function fn_get_user_auth_token($user_id, $ttl = 604800)

на

function fn_get_user_auth_token($user_id, $ttl = 2592000)

В этом случае при авторизации время жизни токена будет 30 дней

День добрый уважаемый, да, вот тут cart power тоже написали, но у них кажется другое )

Файл:
app/addons/storefront_rest_api/func.php
Функция:
function fn_storefront_rest_api_api_get_user_data($api, &$auth)

Строчка:
fn_generate_ekey(‘’, ProfileDataTypes::USER, SECONDS_IN_DAY * 7, $auth[‘token’]);
Заменяется на:
fn_generate_ekey(‘’, ProfileDataTypes::USER, SECONDS_IN_DAY * 30, $auth[‘token’]);

Где 30 - это количество дней.

С уважением,
Cart-Power

Вижу. Оба решения должны сработать. Наше решение ставит 30 дней при авторизации, а их - при автопродлении токена

@ecomlabs а тут не подскажиет?

Да, сделал, надеюсь сработает.
Покупатели выбешиваются постоянно их выкидывает на 8й день из учетки, и ладно я понимаю там бинансы всякие и все в таком роде где карты привязаны, тут ничего нет, просто зашел заказал еду и вышел.