Σελίδα 1 από 2

[FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 11 Φεβ 2021, 18:08
από Alexandra
Παρακάτω ακολουθούν οδηγίες για εφαρμογή τροποποιήσεων στο 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

Re: [FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 11 Φεβ 2021, 18:25
από htwp
Να 'σαι καλά Αλεξάνδρα, πολύ χρήσιμο. Έχει δημιουργήσει πολλά θεματάκια ο νέος chrome....

Re: [FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 11 Φεβ 2021, 18:34
από Alexandra
@htwp Ελπίζω κι εγώ να βοηθήσει, Κώστα αν δεις κάποιο typo, ενημέρωσε.

Re: [FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 11 Φεβ 2021, 19:55
από antstyl
Απίστευτα χρήσιμο γιατί οι πληροφορίες στο ιντερνετ είναι συγκεχυμένες με ολες αυτές τις εκδόσεις opencart - php

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

Re: [FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 06 Ιούλ 2021, 14:58
από SPKON
Δυστυχως δεν ειναι δυνατον να κανω εισοδο στο admin μετα τις παραπανω αλλαγες αν και τις 2πλοτσεκαρισα και αλλαξα και το αρχειο encryption.php σε OC 2.3.0.2 & php 7.2.34.

Re: [FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 06 Ιούλ 2021, 15:55
από Alexandra
Δυστυχως δεν ειναι δυνατον να κανω εισοδο στο admin μετα τις παραπανω αλλαγες αν και τις 2πλοτσεκαρισα και αλλαξα και το αρχειο encryption.php σε OC 2.3.0.2 & php 7.2.34.
Άλλαξε PHP σε 7.3.x

Re: [FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 06 Ιούλ 2021, 20:48
από SPKON
Alexandra έγραψε: 06 Ιούλ 2021, 15:55
Δυστυχως δεν ειναι δυνατον να κανω εισοδο στο admin μετα τις παραπανω αλλαγες αν και τις 2πλοτσεκαρισα και αλλαξα και το αρχειο encryption.php σε OC 2.3.0.2 & php 7.2.34.
Άλλαξε PHP σε 7.3.x
Εγινε το upgrade σε php 7.3, παρολαυτα το προβλημα παρουσιαστηκε ξανα με error 500 αυτη την φορα.
Σε demo clean install OC2302 php 7.3 , ετρεξε κανονικα χωρις θεμα.

Sto log file του server δειχνει το παρακατω warning το οποιο δεν ξερω αν εχει σχεση με το προβλημα
Κώδικας: Επιλογή όλων
	mod_fcgid: stderr: PHP Warning: is_file(): open_basedir restriction in effect. File(/var/www/vhosts/637938896.linuxzone...........gr/.......gr/system/../../vendor/autoload.php) is not within the allowed path(s): (/var/www/vhosts/637938896.linuxzone........gr/.......gr/:/tmp/) in /var/www/vhosts/637938896.linuxzone144........../.........gr/system/startup.php on line 89

Re: [FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 07 Ιούλ 2021, 1:07
από Alexandra
@SPKON
Υποθέτοντας ότι δεν χρησιμοποιείς τον φάκελο vendor που υπήρχε εξωτερικά στην εγκατάσταση της v2.3.0.2, δοκίμασε το ακόλουθο. Άνοιξε το αρχείο system/startup.php και στην γραμμή 89 το:
Κώδικας: Επιλογή όλων
if (is_file(DIR_SYSTEM . '../../vendor/autoload.php')) {
	require_once(DIR_SYSTEM . '../../vendor/autoload.php');
}
απενεργοποίησε το έτσι:
Κώδικας: Επιλογή όλων
/*
if (is_file(DIR_SYSTEM . '../../vendor/autoload.php')) {
	require_once(DIR_SYSTEM . '../../vendor/autoload.php');
}
*/

Re: [FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 09 Ιούλ 2021, 0:07
από SPKON
Alexandra έγραψε: 07 Ιούλ 2021, 1:07 @SPKON
Υποθέτοντας ότι δεν χρησιμοποιείς τον φάκελο vendor που υπήρχε εξωτερικά στην εγκατάσταση της v2.3.0.2, δοκίμασε το ακόλουθο. Άνοιξε το αρχείο system/startup.php και στην γραμμή 89 το:
Κώδικας: Επιλογή όλων
if (is_file(DIR_SYSTEM . '../../vendor/autoload.php')) {
	require_once(DIR_SYSTEM . '../../vendor/autoload.php');
}
απενεργοποίησε το έτσι:
Κώδικας: Επιλογή όλων
/*
if (is_file(DIR_SYSTEM . '../../vendor/autoload.php')) {
	require_once(DIR_SYSTEM . '../../vendor/autoload.php');
}
*/
Αυτο ειναι σωστο, ειναι ΟΚ τωρα.

Re: [FIX] OpenCart - Google Chrome SameSite Session Cookie

Δημοσιεύτηκε: 17 Σεπ 2021, 14:26
από stavrosa
Ευγε Αλεξάνδρα! και σε ευχαριστούμε