如何让我的 OpenCart 客户在一段时间不活动后注销?

How do I make my OpenCart customers logout after a period of inactivity?

我们有一个 OpenCart 站点(版本 2.3.0.2)。当客户登录时,我希望他们在指定时间不活动后被迫注销,例如30 分钟我观察到客户即使超过一个小时不活动也永远不会注销。

在 php.ini 上,在根目录中找到,我修改了超时行:

session.gc_maxlifetime = 3600;

我放置了一个 info.php 文件,代码为:

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

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

回声和 phpinfo() 中的 session.gc_maxlifetime 输出均显示 1440(24 分钟)。

因此客户要么在 30 分钟或 24 分钟后注销。无论哪种方式,我都希望客户在一段时间不活动后注销。我该怎么做?

最好的添加方法是使用使用当前时间设置的会话。

注意:最好创建一个 vqmod 或 modification section 取决于您使用的 Opencart 版本,以免影响 Opencart Core

请参阅以下代码:

    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->logout();
    } else if (isset($this->session->data['CREATED'])) { 
        $this->session->data['CREATED'] = time();
    }

我对 进行了一些修改,使其符合我的需要

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

以上代码已放置在 system/library/customer.php 文件(使用 vqmod)中以下行 if (isset($this->session->data['customer_id'])) {

以下代码是否适合 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>

<modification>
<id>Timed Logout</id>
<version>1.0</version>
<vqmver>2.1.6</vqmver>
<author>Raza Umer</author>
<file name="system/library/customer.php">
    <operation error="log">
        <search position="after"><![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'] > 86400) { //time in seconds 
session_destroy();
$this->logout();
} else if (isset($this->session->data['SESSIONCREATED'])) { 
$this->session->data['SESSIONCREATED'] = time();
 }

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

复制上面的修改并另存为filename.xml并放入vqmod/xml/