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

Ευχαριστούμε για τον χρόνο σου!
#7355
Δυστυχως δεν ειναι δυνατον να κανω εισοδο στο admin μετα τις παραπανω αλλαγες αν και τις 2πλοτσεκαρισα και αλλαξα και το αρχειο encryption.php σε OC 2.3.0.2 & php 7.2.34.
#7356
Δυστυχως δεν ειναι δυνατον να κανω εισοδο στο admin μετα τις παραπανω αλλαγες αν και τις 2πλοτσεκαρισα και αλλαξα και το αρχειο encryption.php σε OC 2.3.0.2 & php 7.2.34.
Άλλαξε PHP σε 7.3.x
#7361
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
#7364
@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');
}
*/
#7373
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');
}
*/
Αυτο ειναι σωστο, ειναι ΟΚ τωρα.

Καλησπέρα στην ομάδα, θέλω να ρωτήσω το εξής: Σε O[…]

Σας ευχαριστώ πολύ για την απάντηση, σκεφτείτε η ε[…]

Έλεγξε αν έχεις πολύ μεγάλα αρχεία εικόνων και αν […]

Κάνε ένα restart τον σερβερ. (βασικα την λειτουργι[…]

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