OpenCart-Hellas 

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

Αναφορές νέων & επίλυση γνωστών bugs.
#6939
Σε εκδόσεις OpenCart 3.0.x έως και την 3.0.3.6 υπάρχει bug στο garbage collection των sessions που καταχωρούνται στη βάση και δεν διαγράφονται.

Για την ενεργοποίηση του garbage collection ακολουθήστε τις οδηγίες:

(Οι οδηγίες βασίστηκαν σε κώδικα της v3.0.3.6, αν υπάρχει κάποια διαφορά σε παλαιότερες εκδόσεις στείλτε μηνυμα να το δω)

Στο system/library/session.php
κάτω από το:
Κώδικας: Επιλογή όλων
register_shutdown_function(array($this, 'close'));
προσθέτουμε:
Κώδικας: Επιλογή όλων
register_shutdown_function(array($this, 'gc'));
Πριν το:
Κώδικας: Επιλογή όλων
public function __destroy() {
προσθέτουμε:
Κώδικας: Επιλογή όλων
	
public function gc() {
  $this->adaptor->gc();
}
Στο system/library/session/db.php
το:
Κώδικας: Επιλογή όλων
	public function gc($expire) {
		$this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire < " . ((int)time() + $expire));
		
		return true;
	}
Το κάνουμε έτσι (θα τρέχει μόνο κάποιες φορές που θα προκύπτει βάσει τυχαιότητας ο αριθμός 1 για να μην επιβαρύνεται ο sql server με συνεχή queries σε καταστήματα που έχουν πολλές επισκέψεις):
Κώδικας: Επιλογή όλων
	public function gc() {
		if (round(rand(1, 5)) == 1) {
			$this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE `expire` < '" . $this->db->escape(date('Y-m-d H:i:s', time()-$this->expire)) . "'");
		}

		return true;
	}
#7574
Καλησπέρα,

Μην κάνεις σε παρακαλώ παραθέσεις όλου του κώδικα του άρθρου αν δεν είναι απαραίτητο, γιατί δεν εξυπηρετεί σε κάτι και είναι πιο δύσκολο σε άλλους να παρακολουθήσουν τις απαντήσεις.

Σχετικά με το ερώτημα σου, είναι επιβεβαιωμένο από εμένα ότι λειτουργεί σε έκδοση 3.0.2.0 και επίσης η έκδοση 3.0.3.1 που ανέφερες δεν έχει διαφορές στα αρχεία που γίνονται οι μεταβολές, άρα και εκεί θα λειτουργεί.

Η τροποποίηση δεν επιβαρύνει την ταχύτητα του site και δεν προσθέτει καταχωρήσεις, αντίθετα διαγράφει τα περιττά sessions που προηγουμένως δεν διαγράφονταν από bug. Η διαγραφή των sessions, ακριβώς για να μην επιβαρύνεται το site, δεν γίνεται κάθε φορά που τρέχει άλλα με μία τυχαιοποίηση πχ ανά 3-4 φορές που θα τρέξει.

Γνωρίζεις PHP, κατανοείς πως λειτουργεί ο κώδικας; Αν δεν γνωρίζεις PHP, είσαι βέβαιος ότι έχεις ακολουθήσει πιστά τις οδηγίες; Νομίζω είναι straightforward, το μόνο που θα μπορούσε γίνει παρανόηση ήταν η οδηγία στη σελίδα του session πριν το τελικό " }". Το έκανα πριν το "public function __destroy() {" για να είναι πιο κατανοητό. Δες το πάλι βήμα βήμα και αν εξακολουθείς να έχεις πρόβλημα εδώ είμαστε.

Καλησπέρα στην opencart κοινότητα Έχουμε δημιουργή[…]

Μπορεί να κάνω και λάθος, αλλά νομίζω πως δεν επι[…]

άνοιγμα προϊόντων

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

XML για car.gr

Καλησπέρα, Τα κόστη που αναφέρω παρακάτω είναι ε[…]

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