2017-03-27 1 views
2

Nous avons un site OpenCart (ver 2.3.0.2). Lorsqu'un client se connecte, je souhaite qu'il soit obligé de se déconnecter après avoir été inactif pendant une durée spécifiée, par ex. 30 min. J'observe que les clients ne sont jamais déconnectés même s'ils sont inactifs pendant plus d'une heure.Comment puis-je déconnecter mes clients OpenCart après une période d'inactivité?

On php.ini, a trouvé le répertoire racine, j'ai modifié la ligne de délai d'attente:

session.gc_maxlifetime = 3600; 

J'ai placé un fichier info.php avec le code:

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

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

La sortie a montré 1440 (24 mins) pour l'écho et session.gc_maxlifetime dans le phpinfo().

Donc, un client est déconnecté après 30 minutes ou 24 minutes. De toute façon, je préfère que le client se déconnecte après une période d'inactivité. Comment puis-je faire cela?

Répondre

5

La meilleure façon d'ajouter ceci est d'utiliser des sessions qui sont définies en utilisant l'heure actuelle.

NB: Il est préférable de créer un vqmod ou modification section en fonction de la version d'Opencart que vous utilisez afin de ne pas affecter l'Opencart Core.

Voir le code ci-dessous:

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

C'était ce que j'avais à l'esprit aussi. J'espérais un moyen plus facile. :-) Merci d'avoir suggéré, au moins ce que j'avais à l'esprit est vérifié –

+0

Je ne pense pas que ce soit plus facile alors ça :) Pas de problème .. – Sphinx

2

J'ai modifié Sphinx's answer un peu pour le faire fonctionner selon mes besoins

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(); 
} 

code ci-dessus a été placé dans le système/bibliothèque/fichier customer.php (en utilisant vqmod) ci-dessous la ligne suivante if (isset($this->session->data['customer_id'])) {

0

le code suivant serait-il correct pour le vQmod?

<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>