如果我在 Slim 框架提供的 `setCookie()` 之后使用 `exit()` 将无法工作

`setCookie()` that Slim framework provides will not work if I use `exit()` after it

我需要使用 ajax 请求来执行登录。这是请求转到的函数:

function loginAdmin() {
    $app = \Slim\Slim::getInstance();
    if (auth()) {
        $app->setCookie('admin', TRUE);
        exit(TRUE);
    }
    exit(NULL);
}

然后我将处理 ajax 响应以查看它是否属实。但是cookie不会被设置。如果我删除 exit(TRUE) 可以设置 cookie。

我读过Slim的源代码,setCookie()函数调用\Slim\Http\Cookies::setCookie(),将键和值设置到$data成员中。但我不确定 cookie 何时发送。

但我仍然不知道 exit 功能如何影响 setCookie 功能。

您无法使用 exit() 发送回复。您应该 echo() 路由中的响应。例如:

function loginAdmin() {
    $app = \Slim\Slim::getInstance();
    if (auth()) {
        $app->setCookie('admin', TRUE);
        return 1;
    }
    return 0;
}

$app->get('/foo', function {
    echo loginAdmin();
});

以上代码不是进行身份验证的好方法,但它说明了这一点。