Codeigniter用户跟踪访问者

时间:2014-07-27 09:30:18

标签: php codeigniter user-tracking

我正在使用Codeigniter网站,并尝试仅为访问者(非注册用户)实施用户跟踪功能。

我想在每个页面重定向上跟踪(ip地址,from_page,to_page,time_stamp),因为我只想跟踪我需要访问数据库的临时用户,以检查帐户是否存在。

我的问题是在哪里编写我的代码,以便Codeigniter在每次重定向之前自动检查,(请记住,该地方应该有权访问数据库或会话)。

签入每个控制器文件将产生如此多的冗余代码,我不认为htaccess文件可以做到这一点。

-Thanks

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点:

一种是在helpers文件夹中创建一个帮助文件,比如说trackuser_helper.php。创建一个函数来在此文件中执行跟踪(例如trackUser())。然后在config/autoload.php内自动加载此文件,如下所示:

/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['helper'] = array('url', 'file');
*/

$autoload['helper'] = array('trackuser'); //ignore the '_helper.php' portion of the filename

现在你可以在每个控制器中调用trackUser()

我认为更好的第二个选项是使用Hooks提供的CodeIgniter

这些在config/hooks.php内定义如下:

$hook['pre_controller'][] = array(
                                'class'    => 'MyClass',
                                'function' => 'Myfunction',
                                'filename' => 'Myclass.php',
                                'filepath' => 'hooks',
                                'params'   => array('param1', 'param2', 'etc')
                                );

数组索引与您要使用的特定挂钩点的名称相关联。在上面的例子中,钩子点是pre_controller。钩点列表如下所示。应在关联钩子数组中定义以下项目:

1.Class - 要调用的类的名称。如果你喜欢使用    一个过程函数而不是一个类,将此项留空。

2.Function - 您要呼叫的功能名称。 filename文件名    包含你的类/功能。

3.Filepath - 目录的名称    包含你的脚本。注意:您的脚本必须位于    目录INSIDE你的应用程序文件夹,所以文件路径是    相对于该文件夹。例如,如果您的脚本位于    应用程序/钩子,你只需使用钩子作为你的文件路径。如果    您的脚本位于您将使用的application / hooks / utilities中    hooks / utilities作为你的文件路径。没有尾随斜线。

4.Params - 您希望传递给脚本的任何参数。    此项目是可选的。

指定在每个控制器加载之前要执行的函数调用。这样,您甚至无需向每个trackuser()添加controller。这些挂钩可以是pre_controllerpost_controller。您可以在CI documentation.

上阅读有关挂钩的更多信息