OpenCart-Hellas 

Η Ελληνική κοινότητα υποστήριξης του Opencart

Αναφορές νέων & επίλυση γνωστών bugs.
#7053
Παρακάτω ακολουθούν οδηγίες για εφαρμογή τροποποιήσεων στο OpenCart ώστε να υποστηρίζει τις νέες προδιαγραφές του Google Chrome σχετικά με την παράμετρο SameSite στο session cookie, αλλά και σε άλλα cookies όπως τα language και currency.

- Μετά τις αλλαγές κάντε ανανέωση το cache των τροποποιήσεων.
- Οι ακόλουθες τροποποιήσεις υποστηρίζονται σε έκδοση PHP >= 7.3.x*

*!!! ΣΗΜΕΙΩΣΗ!!! Μόνο για εκδόσεις OpenCart 2.x, αν δηλωθεί η PHP από 7.2.x και άνω, πρέπει να τροποποιηθεί και το αρχείο system/library/encryption.php για να χρησιμοποιεί συνάρτηση openssl καθώς η συνάρτηση mcrypt που χρησιμοποιoύν οι εκδόσεις 2.x, δεν υποστηρίζεται από τις εκδόσεις PHP >= 7.2.x. Τα τροποποιημένα αρχεία encryption.php για την κάθε έκδοση OpenCart, έχουν επισυναφθεί παρακάτω.

Εκδόσεις 3.x

Στο catalog/controller/startup/session.php το:
Κώδικας: Επιλογή όλων
setcookie($this->config->get('session_name'), $this->session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));

γίνεται:
Κώδικας: Επιλογή όλων
setcookie($this->config->get('session_name'), $this->session->getId(), array('expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

Στο catalog/controller/startup/startup.php:

το:
Κώδικας: Επιλογή όλων
setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

γίνεται:
Κώδικας: Επιλογή όλων
setcookie('language', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

το:
Κώδικας: Επιλογή όλων
setcookie('currency', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

γίνεται:
Κώδικας: Επιλογή όλων
setcookie('currency', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

Στο system/framework.php το:
Κώδικας: Επιλογή όλων
setcookie($config->get('session_name'), $session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));

γίνεται:
Κώδικας: Επιλογή όλων
setcookie($config->get('session_name'), $session->getId(), array('expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));


Εκδόσεις 2.2.0.0 & 2.3.0.2

Στο catalog/controller/startup/startup.php

το:
Κώδικας: Επιλογή όλων
setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

γίνεται:
Κώδικας: Επιλογή όλων
setcookie('language', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

το:
Κώδικας: Επιλογή όλων
setcookie('currency', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

γίνεται:
Κώδικας: Επιλογή όλων
setcookie('currency', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

Στο system/library/session.php :

κάτω από το:
Κώδικας: Επιλογή όλων
ini_set('session.cookie_httponly', 'On');

προσθέτουμε:
Κώδικας: Επιλογή όλων
ini_set('session.cookie_secure', true);
ini_set('session.cookie_samesite', 'None');

Στην έκδοση 2.3.0.2 το:
Κώδικας: Επιλογή όλων
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'));

γίνεται:
Κώδικας: Επιλογή όλων
setcookie($key, $this->session_id, array('expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

Αρχείο system/library/encryption.php για εκδόσεις OpenCart 2.x με PHP >= 7.2
encryption_file_for_oc_2x_with_php_72_and_later.zip


Εκδόσεις 2.0.x έως 2.1.0.2

Στο index.php το:
Κώδικας: Επιλογή όλων
setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);

γίνεται:
Κώδικας: Επιλογή όλων
setcookie('language', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

Στο system/library/currency.php το:
Κώδικας: Επιλογή όλων
setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

γίνεται:
Κώδικας: Επιλογή όλων
setcookie('currency', $currency, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

Στο system/library/session.php κάτω από το:
Κώδικας: Επιλογή όλων
ini_set('session.cookie_httponly', 'On');

προσθέτουμε:
Κώδικας: Επιλογή όλων
ini_set('session.cookie_secure', true);
ini_set('session.cookie_samesite', 'None');

Αρχείο system/library/encryption.php για εκδόσεις OpenCart 2.x με PHP >= 7.2
encryption_file_for_oc_2x_with_php_72_and_later.zip
Πρέπει να συνδεθείτε για να δείτε τα συνημμένα αρχεία σε αυτήν τη δημοσίευση.
#7056
@htwp Ελπίζω κι εγώ να βοηθήσει, Κώστα αν δεις κάποιο typo, ενημέρωσε.
#7057
Απίστευτα χρήσιμο γιατί οι πληροφορίες στο ιντερνετ είναι συγκεχυμένες με ολες αυτές τις εκδόσεις opencart - php

Ευχαριστούμε για τον χρόνο σου!

:o 1.500.000 rows στο table!! Thank you!

Καλησπέρα, Επειδή αυτή η περίοδος ήταν φορτωμένη[…]

Μόλις γίνει η απενεργοποίηση κάνε καθαρισμό την ca[…]

Καλησπέρα . Δεν έτρεχε κάτι άλλο στην 80 αλλά δε π[…]

Πριν ζητήσετε βοήθεια στο φόρουμ, παρακαλούμε ελέγξτε αν υπάρχει έτοιμη λύση στο OpenCart Extension Marketplace!