php - Slim SessionCookie 中间件不工作

标签 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,因此不会保存 session 变量。此外,在导航器中打开 cookies 列表时,我没有看到任何内容。为什么不保存 session 的cookie?我验证并确保执行了 SessionCookie 类的 call() 函数。

最佳答案

如果在 Slim\Middleware\SessionCookie 之前先添加 CustomMiddleware 会怎样?

像这样:

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']); ?>

对我来说,它完美无缺。但是如果我在 CustomMiddleware 之前添加 Slim\Middleware\SessionCookie$_SESSION['test'] 的输出仍然是 NULL.

中间件是这样工作的:

Middleware

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

关于php - Slim SessionCookie 中间件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27869019/

相关文章:

node.js - 用于多部分 Nodejs 的 Bodyparser

go - 如何在 Gin 中间件中获取 url?

php - 如何在两个表中使用条件在一个表中获取记录 - PHP 和 Mysql

php - 如何将 HTML 转换为 BBCode

php - 无法使用php更新mysql数据库

ruby-on-rails-3 - 在 Rails 中重命名 session cookie

php - 使用面向对象的 mysqli 概念选择或更新单个值

facebook - 维护用户 session (在 Facebook O-Auth、服务器端登录之后)

android - 在 Android 中使用 Django 用户对象

用于过滤堆栈中引发的所有异常的 Ruby rack 中间件