3

我在 Codeigniter 网站上工作,并尝试仅为访问者(非注册用户)实现用户跟踪功能。

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

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

签入每个控制器文件会产生很多冗余代码,我认为 htaccess 文件做不到。

-谢谢

4

1 回答 1

1

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

一种是创建一个帮助文件,比如trackuser_helper.php在 helpers 文件夹中。创建一个函数来在这个文件中进行跟踪(比如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 - 你要调用的函数名。文件名 包含您的类/函数的文件名。

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

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

这指定了在每个控制器加载之前要执行的函数调用。这样你甚至不需要添加trackuser()到每个controller. 这些钩子可以是pre_controllerpost_controller您可以在CI 文档中阅读有关钩子的更多信息。

于 2014-07-27T09:33:02.097 回答