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

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

Всем добрый день.

 

Не получается правильно настроить сессию в opencart. Прошу помощи.

Началось все с того, что возникло желание заставить корзину не очищаться после закрытия браузера.

 

Все упирается в то, что надо заставить куки запомнить PHPSESSID. Вроде все настроил (вывод phpinfo прилагаю)

 

Настораживают две вещи:

1. если ставить принудительно в php.ini session.cookie_lifetime = 3600, то перестает пускать админка. Не ругается, но и не пускает.

2. В инспекторе в хроме в куки для PHPSESSID вместо даты expire стоит просто session - это что значит? Что даты нет? А как заставить, чтобы была.

2.1 Как-то дату поставить туда все же удалось - с утра ее видел и даже сделал скрин (прилагаю), но там не понятное время. Оно явно просроченное, но почему тогда кука жива?

 

Подскажите, как побороть проблему с сессией?

 

ocStore 2.3.0.2.2

сайт https://krabzik.ru

info.jpg

err.jpg

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


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, SkyDiver78 сказал:

 

Началось все с того, что возникло желание заставить корзину не очищаться после закрытия браузера.

 

Да простят меня клиенты у которых я за это деньги просил... :) 

 

Файл

"system/library/cart.php"

Закомментируй или удали строку №14

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

 

Корзина перестанет самоочищаться.

 

в .htaccess добавь следующие строки:

php_value session.cookie_lifetime 8640000
php_value session.gc_maxlifetime 8640000
php_value session.cache_expire 18000

 

  • +1 1

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


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

Спасибо за советы. Почти все проделал, как написано.

Файл system/library/cart.php нашелся по адресу system/library/cart/cart.php, но думаю, что это он. Такую строчку нашел и закомментарил. Как я понял, из-за нее корзина очищается через час. Но у меня корзина не держится без браузера вообще :(

 

В .htaccess в корне вставил.

 

Но корзина после закрытия браузера по-прежнему не запоминается (( Пока открыт браузер могу закрыть окно сайта, снова открыть - корзина есть. Закрыл браузер - все - с чистого листа. Ну и смущает отсутствие даты в куках для PHPSESSID

 

err2.jpg

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


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, SkyDiver78 сказал:

Спасибо за советы. Почти все проделал, как написано.

Файл system/library/cart.php нашелся по адресу system/library/cart/cart.php, но думаю, что это он. Такую строчку нашел и закомментарил. Как я понял, из-за нее корзина очищается через час. Но у меня корзина не держится без браузера вообще :(

 

В .htaccess в корне вставил.

 

Но корзина после закрытия браузера по-прежнему не запоминается (( Пока открыт браузер могу закрыть окно сайта, снова открыть - корзина есть. Закрыл браузер - все - с чистого листа. Ну и смущает отсутствие даты в куках для PHPSESSID

 

err2.jpg

Значит проблема исключительно в браузере.

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


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

А Вы можете попробовать сделать корзину на моем сайте? Будет она держаться у Вас?

 

Попробовал сафари на ipad - эффект тот же. Корзина не держится после закрытия.. :(

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

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


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

Если в session.php ставить в вызов

session_set_cookie_params(0, '/');

вместо 0 длительность (например 86400 - сутки), то длительность куки PHPSESSID становится уже не "session", а реальная дата - чего и добиваюсь..

 

Но сразу возникает эффект, что при добавлении товара в корзину она тут же очищается (даже браузер закрывать не надо).

Кто-то может подсказать, как можно выставить длительность сессии, чтобы при этом не ломалось добавление в корзину?

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


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

Если увеличиваете время жизни через session_set_cookie_params(XXX, '/') то все сессии умирают сразу в момент создания, т.к. на 2.3 есть ошибка в установке сессионной куки. В этом файле есть код вида

if ($key != 'PHPSESSID') {
	setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), 	ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));
}

В нем время жизни куки устанавливается неверно. Правильно так

if ($key != 'PHPSESSID') {
	setcookie($key, $this->session_id, time() + ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));
}

либо же напрямую указать желаемое время ХХХ в секундах, если по каким-то причинам нет возможности изменить параметр session.cookie_lifetime.

if ($key != 'PHPSESSID') {
	setcookie($key, $this->session_id, time() + XXX, ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));
}

 

  • +1 3

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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