2017-03-27 7 views
2

Wir haben eine OpenCart-Site (Version 2.3.0.2). Wenn sich ein Kunde anmeldet, möchte ich, dass er sich abmeldet, nachdem er für eine bestimmte Zeit, z. 30 Minuten. Ich beobachte, dass Kunden niemals ausgeloggt werden, auch wenn sie länger als eine Stunde inaktiv sind.Wie kann ich meine OpenCart-Kunden nach einer gewissen Inaktivität abmelden?

On php.ini, auf Stammverzeichnis gefunden wird, modifiziert I die Timeout-line:

session.gc_maxlifetime = 3600; 

I eine info.php Datei mit dem Code platziert:

<?php 
$maxlifetime = ini_get("session.gc_maxlifetime"); 
echo "max=".$maxlifetime; 

echo "<hr>"; 
phpinfo(); 
?> 

Der Ausgang 1440 zeigte (24 Minuten) für das Echo und die Session.gc_maxlifetime in der phpinfo().

Entweder ein Kunde ist nach 30 Minuten oder 24 Minuten abgemeldet. Wie auch immer, ich bevorzuge es, den Kunden nach einer gewissen Inaktivität abzumelden. Wie mache ich das?

Antwort

5

Die beste Möglichkeit, dies hinzuzufügen, ist die Verwendung von Sitzungen, die mit der aktuellen Uhrzeit eingestellt werden.

Hinweis: Es ist am besten, je nach verwendeter Opencart-Version einen vqmod oder modification section zu erstellen, um den Opencart Core nicht zu beeinträchtigen.

Siehe Code unten:

if (!isset($this->session->data['CREATED'])) { 
     $this->session->data['CREATED'] = time(); 
    } else if (time() - $this->session->data['CREATED'] > 1200) { //time in seconds 
     session_destroy(); 
     $this->redirect($this->url->link('account/login', '', 'SSL')); 
    } else if (isset($this->session->data['CREATED'])) { 
     $this->session->data['CREATED'] = time(); 
    } 
+0

das war, was ich auch im Sinn hatte. Ich habe auf einen leichteren Weg gehofft. :-) Danke für den Vorschlag, zumindest was ich im Sinn hatte ist verifiziert –

+0

Ich glaube nicht, dass es einfacher wird als das :) Kein Problem .. – Sphinx

2

I Sphinx's answer etwas geändert haben, um es nach meinem Bedürfnis

if (!isset($this->session->data['SESSIONCREATED'])) { 
    $this->session->data['SESSIONCREATED'] = time(); 
} else if (time() - $this->session->data['SESSIONCREATED'] > 1200) { //time in seconds 
    session_destroy(); 
    $this->logout(); 
} else if (isset($this->session->data['SESSIONCREATED'])) { 
    $this->session->data['SESSIONCREATED'] = time(); 
} 

Above-Code platziert wurde in System/Library/customer.php Datei funktioniert (mit vqmod) unter der folgenden Zeile if (isset($this->session->data['customer_id'])) {

0

wäre der folgende Code für die vQmod richtig?

<modification> 
<id>Timed Logout</id> 
<version>1.0</version> 
<vqmver>2.1.6</vqmver> 
<author>websiteinc.co.uk</author> 
<file name="system/library/customer.php"> 
    <operation error="log"> 
     <search position="after" index="2"><![CDATA[if (isset($this->session->data['customer_id']))]]></search> 

<add><![CDATA[if (!isset($this->session->data['SESSIONCREATED'])) { 
$this->session->data['SESSIONCREATED'] = time(); 
} else if (time() - $this->session->data['SESSIONCREATED'] > 1400) { //time in seconds 
session_destroy(); 
$this->logout(); 
} else if (isset($this->session->data['SESSIONCREATED'])) { 
$this->session->data['SESSIONCREATED'] = time(); 
} 

]]></add> 
    </operation> 
</file> 

Verwandte Themen