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

настройки сессии


Recommended Posts

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

 

Не получается правильно настроить сессию в 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

 

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

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

Файл 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", а реальная дата - чего и добиваюсь..

 

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

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

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


  • 6 months later...

Если увеличиваете время жизни через 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 5
Надіслати
Поділитися на інших сайтах


  • 1 year later...

@Raino Очень вам благодарен. Этот баг не исправили и в 3-й версии.
Надо внести изменения в 2 файла. В первый, чтобы на фронте работали сессии, во второй, чтобы в админку получилось зайти.
catalog\controller\startup\session.php 

system\framework.php

Принцип тот же. Ищем ini_get('session.cookie_lifetime') и добавляем текущее время time() 

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


  • 4 months later...
В 08.12.2017 в 16:40, Raino сказал:

Если увеличиваете время жизни через 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'));
}

 

 

Лучше изменить на 

 

$cookie_lifetime = ( ini_get('session.cookie_lifetime') > 0 ) ? time() + ini_get('session.cookie_lifetime') : 0;

setcookie($this->config->get('session_name'), $this->session->getId(), $cookie_lifetime, ini_get('session.cookie_path'), ini_get('session.cookie_domain'));

 

тогда при директиве session.cookie_lifetime = 0 срок жизни куки будет адекватным - до закрытия браузера, иначе - жизнь до текущего времени то есть = 0.

Змінено користувачем Sergonito
Надіслати
Поділитися на інших сайтах


  • 1 year later...

@Raino @maaby   спасибо! сейчас очень помогли)) На opencart3 пофиксил это и тепрь корзина не очищается при закрытии браузера
Opencart3: system/framework.php -> 

setcookie($config->get('session_name'), $session->getId(), 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'));

controller/starup/session.php ->

 

setcookie($this->config->get('session_name'), $this->session->getId(), 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'));
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

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

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

Important Information

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