Вам необходимо инициализировать сеанс перед вызовом 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'
],
];