【问题标题】:$_SESSION is not global when using `SessionCookie` in slim framework?在苗条框架中使用“SessionCookie”时,$_SESSION 不是全局的?
【发布时间】: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的函数中设置$_SESSIONcheckAdmin()将始终exit(NULL),所以似乎会话分配不起作用。

但是如果我在分配给GET /的函数中设置$_SESSIONcheckAdmin可以在任何地方检索它。

它必须与SessionCookie 相关,因为本机会话存储工作正常。

那么我怎样才能让它工作呢?

【问题讨论】:

  • 因为许多框架使用内部会话实现。你应该使用框架会话类。
  • @AdilIlhan Slim 不提供会话类,但在添加 SessionCookie 时,它实际上替换了本机会话行为。
  • 这里有同样的问题。你解决了吗?
  • @LOLKAT 是的。后来我发现如果你使用SessionCookie,你设置的每个会话都没有效果。相反,您应该使用getCookie()setCookie()

标签: php session session-cookies slim


【解决方案1】:

如果您使用会话 cookie 中间件,则不需要启动原生 PHP 会话。 $_SESSION 超全局变量仍然可用,它将通过中间件层而不是 PHP 的本机会话管理持久化到 HTTP cookie 中。

所以不要使用session cookie middleware

【讨论】:

  • 什么意思?我想如果我添加SessionCookie,我对$_SESSION 执行的操作会转化为cookie 操作。
  • 现在我尝试使用getCookie()setCookie(),发现如果在setCookie()之后使用exit(),cookie将不会被设置。什么...
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
相关资源
最近更新 更多