为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Codeigniter 4 Constructor 中加载会话

如何在 Codeigniter 4 Constructor 中加载会话

PHP
墨色风雨 2023-04-21 13:39:33
就像在 Codeigniter 3 中一样,如果不在会话中,我可以通过在构造函数中设置以下代码来限制用户访问特定的控制器if(! session()->get('username'))     {             return redirect()->to('/login');     }当我在 Codeigniter 4 中尝试相同的操作时,它不会工作,直到我在每个方法中加载它才能工作
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

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

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

但是,正如您的帖子所说,如果您需要检查每个控制器是否需要会话,那么您绝对应该查看过滤器并创建一个自定义过滤器来检查是否存在会话。

它可能看起来像这样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'

        ],

    ];


查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信