我发现如果我在苗条中使用SessionCookie
,则无法全局检索$_SESSION
。
$app->add(new \Slim\Middleware\SessionCookie());
function checkAdmin() {
if ( ! isset($_SESSION['admin']) || $_SESSION['admin'] !== TRUE) {
exit(NULL);
}
}
$app->get('/.*', function() use($app) {
// function checkAdmin() can retrieve the session value I set here
$_SESSION['admin'] = TRUE;
$app->render('index.php');
});
$app->post('/loginAdmin', function() use($app) {
// function checkAdmin() can NOT retrieve the session value I set here
$_SESSION['admin'] = TRUE;
exit(TRUE);
});
$app->post('/getAllUsers', 'checkAdmin', function() use($app) {
// Not related.
});
如果我在分配给checkAdmin()
的函数中设置exit(NULL)
, $_SESSION
将永远POST /loginAdmin
,因此似乎会话分配无效。
但如果我在分配给$_SESSION
的函数中设置GET /
,checkAdmin
可以在任何地方检索它。
它必须与SessionCookie
相关,因为本机会话存储工作正常。
那我怎样才能让它发挥作用呢?
答案 0 :(得分:0)
如果您使用会话cookie中间件,则不需要启动本机PHP会话。 $ _SESSION超全局仍然可用,它将通过中间件层而不是PHP的本机会话管理持久存储到HTTP cookie中。
所以不要使用session cookie middleware