Промежуточное ПО Slim SessionCookie не работает

Это мой 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 класс выполнен.

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,

Вот как работает промежуточное ПО:

Промежуточное

Таким образом, ваш ответ никогда не получит $_SESSION значение, так как вы установили свой $_SESSION до SessionCookie называется.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]