[FIX] OpenCart - Google Chrome SameSite Session Cookie
Δημοσιεύτηκε: 11 Φεβ 2021, 18:08
Παρακάτω ακολουθούν οδηγίες για εφαρμογή τροποποιήσεων στο 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 το:
γίνεται:
Στο catalog/controller/startup/startup.php:
το:
γίνεται:
το:
γίνεται:
Στο system/framework.php το:
γίνεται:
Εκδόσεις 2.2.0.0 & 2.3.0.2
Στο catalog/controller/startup/startup.php
το:
γίνεται:
το:
γίνεται:
Στο system/library/session.php :
κάτω από το:
προσθέτουμε:
Στην έκδοση 2.3.0.2 το:
γίνεται:
Αρχείο system/library/encryption.php για εκδόσεις OpenCart 2.x με PHP >= 7.2
Εκδόσεις 2.0.x έως 2.1.0.2
Στο index.php το:
γίνεται:
Στο system/library/currency.php το:
γίνεται:
Στο system/library/session.php κάτω από το:
προσθέτουμε:
Αρχείο system/library/encryption.php για εκδόσεις OpenCart 2.x με PHP >= 7.2
- Μετά τις αλλαγές κάντε ανανέωση το 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
Εκδόσεις 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