Slim 2:如何在中间件中使用会话 cookie?

Slim 2: How do I use session cookie in the middleware?

网上看了一圈,还是不明白Slim2中session是怎么工作的。 Slim SessionCookie 的例子极其少见。差不多none。而且我坚持我能从文档中得到什么。

http://docs.slimframework.com/sessions/cookies/

"第二个参数是可选的;它在这里显示,因此您可以看到默认的中间件设置。会话 cookie 中间件将与 $_SESSION 超全局无缝工作,因此您可以轻松迁移到此会话存储中间件,零更改到您的应用程序代码。

如果您使用会话 cookie 中间件,则不需要启动本机 PHP 会话。 $_SESSION superglobal 仍然可用,并且它将通过中间件层持久保存到 HTTP cookie 中,而不是使用 PHP 的本机会话管理。"

所以,例如,

use Slim\Slim;
use Slim\Middleware\SessionCookie;

$app = new Slim();

$app->add(new SessionCookie(
    array(
        'expires' => '20 minutes',
        'path' => '/',
        'domain' => null,
        'secure' => false,
        'httponly' => false,
        'name' => 'slim_session',
        'secret' => 'CHANGE_ME',
        'cipher' => MCRYPT_RIJNDAEL_256,
        'cipher_mode' => MCRYPT_MODE_CBC
    )
));

$app->get('/admin', function () use ($app) {
    // Check for session.
    if (session: user exist) { 
        echo "Hello Admin";
    } else {
        $app->redirect('login');
    }
});

$app->run();

如何设置session: user到中间件并获取它?

这就是我在原生 PHP,

中的做法

bootstrap.php

// Check username and password, if they match with the ones in db, 
// then get the hashed key in the user row. 
// Last, store the key in the session.
$_SESSION["user"] = 'hashedkeyxxxx';

admin.php,

// Check if the session exist when the user want to access the admin only pages.
if ($_SESSION["user"]) { 
    echo "Hello Admin";
} else {
    // redirect
}

那我怎么用 Slim 做这个呢?

直接取自文档。

"If you use the session cookie middleware, you DO NOT need to start a native PHP session. The $_SESSION superglobal will still be available, and it will be persisted into an HTTP cookie via the middleware layer rather than with PHP’s native session management."

http://docs.slimframework.com/sessions/cookies/

因此,当您初始化中间件时,您可以像在传统 PHP 中一样访问 $_SESSION。编码愉快。

编辑:您无法直接开箱即用。但是如果你像这样使用自定义中间件 https://github.com/yusukezzz/slim-session-manager。你会得到一个 API 用法不同的地方。

但是正如从文档中复制的那样,您没有使用 PHP 实现,而是使用以类似方式工作的 SLIM 实现。