3

我在使用 CodeIgniters 实现的会话在重定向后被删除时遇到了一些问题,因此我正在恢复到正常的 PHP 会话。

session_start();假设我希望在每个页面上调用它而不将它添加到每个控制器构造函数中,那么最好的地方在哪里?

我猜想把它放在主 index.php 的顶部会很好,只是想确保这样做不会破坏任何东西,或者是否有更好/标准的地方来放置它?

4

3 回答 3

7

这就是为什么我总是使用包含应用程序范围代码的扩展控制器。

要扩展 codeigniter 控制器,请将此代码放在名为 MY_Controller.php 的文件中并将其保存到 core 文件夹。

class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        session_start();
    }
}

如果您决定使用此解决方案,您的所有控制器都需要扩展 MY_Controller。

创建核心系统类

于 2013-01-02T15:49:21.340 回答
3

您可以轻松地将它们放入index.php. 这是您的 codeigniter 应用程序的入口点,在每个请求上都会被调用。

虽然通常不建议这样做,因为当您升级您的 codeigniter 版本时,您需要记住将您的自定义复制到 index.php。

而不是 index.php,您可以使用预请求挂钩

于 2013-01-02T15:01:06.957 回答
0

不能session_start();直接在 codeigniter 中使用。相反,您必须使用:

$this->library->load('session');
$this->session->set_userdata(array('name' => 'name','age' =>
 'age','etc' => 'etc');
于 2017-02-21T12:22:38.403 回答