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

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

Δεν υπαρχει απο την μερια μου κατι που μπορω να κα[…]

Google Shopping Experience

Καλημερα σας. Ήθελα να ρωτήσω αν έχει κανείς σας[…]

Θα θέλαμε να σας ενημερώσουμε ότι η Ελληνική μετάφ[…]

Αρκεί όμως αυτό, στον achecker δεν σου βγάζει λάθη[…]

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