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

时间:2015-10-11 08:17:41

标签: php session-cookies slim middleware

在网上浏览后,我仍然不了解会话在Slim2中是如何运作的。 Slim SessionCookie的例子极为罕见。几乎没有。并且我坚持从文档中得到的东西。

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

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

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

所以,例如,

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呢?

1 个答案:

答案 0 :(得分:2)

直接从文档中获取。

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

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

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

编辑:你无法直接实现这一目标。但是如果您使用像https://github.com/yusukezzz/slim-session-manager这样的自定义中间件。您将获得使用不同的API。

但是从文档中复制,您不是在使用PHP实现,而是以类似的方式工作的SLIM实现。