Slim SessionCookie中间件无法正常工作

时间:2015-01-09 20:50:13

标签: php session-cookies middleware slim

这是我的index.php

<?php
$app = new \Slim\Slim(
    array(
        'templates.path' => dirname(__FILE__).'/templates'
    )
);

// Add session cookie middle-ware. Shouldn't this create a cookie?
$app->add(new \Slim\Middleware\SessionCookie());

// Add a custom middle-ware
$app->add(new \CustomMiddleware());

$app->get(
    '/', 
    function () use ($app) {
        $app->render('Home.php');
    }
);

$app->run();
?>

这是我的自定义中间件:

<?php
class CustomMiddleware extends \Slim\Middleware {
    public function call() {
        // This session variable should be saved
        $_SESSION['test'] = 'Hello!';

        $this->next->call();
    }
}
?>

这是我的模板( Home.php

<?php
var_dump($_SESSION['test']);
?>

将输出NULL,因此不保存会话变量。此外,当在导航器中打开cookie列表时,我没有看到任何。为什么会话的cookie没有保存?我验证并确保call()类的SessionCookie函数已执行。

1 个答案:

答案 0 :(得分:3)

如何在CustomMiddleware之前先添加Slim\Middleware\SessionCookie

这样的事情:

require 'Slim/Slim.php';

Slim\Slim::registerAutoloader();

class CustomMiddleware extends Slim\Middleware
{
    public function call() {
        // This session variable should be saved
        $_SESSION['test'] = 'Hello!';

        $this->next->call();
    }
}

$app = new Slim\Slim();

$app->add(new CustomMiddleware());

$app->add(new Slim\Middleware\SessionCookie());

// GET route
$app->get('/', function () use ($app)
{
    $app->render('home.php');
});

$app->run();

您的home.php模板文件:

<?php echo($_SESSION['test']); ?>

对我而言,它完美无瑕。但如果我在Slim\Middleware\SessionCookie之前添加CustomMiddleware$_SESSION['test']的输出仍为NULL

这就是中间件的工作原理:

Middleware

因此,您的回复永远不会获得任何$_SESSION值,因为您在调用$_SESSION之前设置了SessionCookie