【问题标题】:How do I load a session in Codeigniter 4 Constructor如何在 Codeigniter 4 构造函数中加载会话
【发布时间】:2020-05-28 07:39:24
【问题描述】:

就像在 Codeigniter 3 中一样,如果不在会话中,我可以通过在构造函数中设置以下代码来限制用户访问特定控制器

if(! session()->get('username'))
    {
        return redirect()->to('/login');
    }

当我在 Codeigniter 4 中尝试相同的方法时,它不会工作,直到我在每个方法中加载它才能工作之前

【问题讨论】:

    标签: php codeigniter codeigniter-4


    【解决方案1】:

    您需要在调用 session()->get('yourvar') 之前初始化会话。
    这应该有效:

    $session = session();
    $session()->get('username');
    

    但是,正如您的帖子所说,如果您需要检查每个控制器是否需要会话,您绝对应该查看过滤器并创建一个自定义的过滤器来检查是否有会话或不是。 https://codeigniter.com/user_guide/incoming/filters.html

    app/Filters 中可能看起来像这样:

    <?php
    
    namespace App\Filters;
    
    use CodeIgniter\HTTP\RequestInterface;
    use CodeIgniter\HTTP\ResponseInterface;
    use CodeIgniter\Filters\FilterInterface;
    
    class LoginFilter implements FilterInterface {
    
        public function before(RequestInterface $request) {
            $session = session();
            if($session->has('username')) {
                return redirect()->to('/login'); 
            }
        }
        //--------------------------------------------------------------------
    
        public function after(RequestInterface $request, ResponseInterface $response) {
            // Do something here
            }
    
    }
    

    如果你想实现一个过滤器,别忘了在Config/Filters.php中声明它

    // Makes reading things below nicer,
        // and simpler to change out script that's used.
        public $aliases = [
            'csrf'       => \CodeIgniter\Filters\CSRF::class,
            'toolbar'    => \CodeIgniter\Filters\DebugToolbar::class,
            'honeypot'   => \CodeIgniter\Filters\Honeypot::class,
            'login'      => \App\Filters\LoginFilter::class,
        ];
    
        // Always applied before every request
        public $globals = [
            'before' => [
                'login',
                //'honeypot'
            ],
            'after'  => [
                'toolbar',
                //'honeypot'
            ],
        ];
    

    【讨论】:

    • 不应该是if(!$session-&gt;has('username')) {加上一个!用于重定向,在会话中找不到用户名吗?
    猜你喜欢
    • 2018-06-07
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多