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

时间:2017-03-27 03:23:14

标签: php opencart opencart2.x

我们有一个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()中的echo和session.gc_maxlifetime,输出显示1440(24分钟)。

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

4 个答案:

答案 0 :(得分:6)

添加此功能的最佳方法是使用使用当前时间设置的会话。

注意:最好创建一个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();
    }

答案 1 :(得分:4)

我已经修改了Sphinx's answer以使其按照我的需要工作

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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