您需要在调用 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'
],
];