【发布时间】:2015-01-19 18:53:00
【问题描述】:
我发现如果我在 slim 中使用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.
});
如果我在分配给POST /loginAdmin的函数中设置$_SESSION,checkAdmin()将始终exit(NULL),所以似乎会话分配不起作用。
但是如果我在分配给GET /的函数中设置$_SESSION,checkAdmin可以在任何地方检索它。
它必须与SessionCookie 相关,因为本机会话存储工作正常。
那么我怎样才能让它工作呢?
【问题讨论】:
-
因为许多框架使用内部会话实现。你应该使用框架会话类。
-
@AdilIlhan Slim 不提供会话类,但在添加
SessionCookie时,它实际上替换了本机会话行为。 -
这里有同样的问题。你解决了吗?
-
@LOLKAT 是的。后来我发现如果你使用
SessionCookie,你设置的每个会话都没有效果。相反,您应该使用getCookie()和setCookie()。
标签: php session session-cookies slim