【问题标题】:Slim SessionCookie middleware not workingSlim SessionCookie 中间件不工作
【发布时间】:2015-03-08 06:33:25
【问题描述】:

这是我的 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?我验证并确保SessionCookie类的call()函数被执行。

【问题讨论】:

  • 我之前没用过slim,但是在设置任何变量之前声明session_start();可能是一个简单的情况。
  • 你能确定调用方法调用 SessionCookie 和 CustomMiddleware 的顺序吗?查看了源代码github.com/codeguy/Slim/blob/master/Slim/Middleware/…,似乎没有设置cookie $_SESSION 被重置。
  • 我找到了这一行:ini_set('session.use_cookies', 0);。看起来cookies的使用被禁用了。 CustomMiddleware 在 SessionCookie 之前调用,但即使我在之后调用它,刷新后会话也不会持续
  • 你解决了吗?我也有同样的问题。

标签: php session-cookies middleware slim


【解决方案1】:

如果在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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多