Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP/CakePHP访问远程用户_Php_Authentication_Cakephp - Fatal编程技术网

从PHP/CakePHP访问远程用户

从PHP/CakePHP访问远程用户,php,authentication,cakephp,Php,Authentication,Cakephp,我正在开发一个CakePHP站点,我刚刚使用.htaccess文件为其启用了VAS身份验证: AuthType VAS AuthVasUseBasic On AuthVasRemoteUserMap local Require valid-user 我希望能够通过使用$\u服务器['REMOTE\u USER']找到登录的用户,但我发现$\u服务器结构中缺少密钥:所有这些都是$\u服务器['REDIRECT\u REMOTE\u USER']。事实上,整个结构中充满了前缀为REDIRECT

我正在开发一个CakePHP站点,我刚刚使用.htaccess文件为其启用了VAS身份验证:

AuthType VAS

AuthVasUseBasic On
AuthVasRemoteUserMap local

Require valid-user
我希望能够通过使用
$\u服务器['REMOTE\u USER']
找到登录的用户,但我发现
$\u服务器结构中缺少密钥:所有这些都是
$\u服务器['REDIRECT\u REMOTE\u USER']
。事实上,整个结构中充满了前缀为
REDIRECT\
的键:

echo var_dump($_SERVER);
array(52) {
["REDIRECT_REDIRECT_REDIRECT_SCRIPT_URL"]=>  string(37) "/cake_1_2/feedbacks/edit/6" 
["REDIRECT_REDIRECT_REDIRECT_SCRIPT_URI"]=>  string(55) "http://test/cake_1_2/feedbacks/edit/6"
["REDIRECT_REDIRECT_REDIRECT_STATUS"]=>  string(3) "200" 
["REDIRECT_REDIRECT_SCRIPT_URL"]=>  string(37) "/cake_1_2/feedbacks/edit/6" 
["REDIRECT_REDIRECT_SCRIPT_URI"]=>  string(55) "http://test/cake_1_2/feedbacks/edit/6" 
["REDIRECT_REDIRECT_STATUS"]=>  string(3) "200" 
["REDIRECT_SCRIPT_URL"]=>  string(37) "/cake_1_2/feedbacks/edit/6" 
["REDIRECT_SCRIPT_URI"]=>  string(55) "http://test/cake_1_2/feedbacks/edit/6" 
["REDIRECT_HANDLER"]=>  string(8) "php5-cgi"
["REDIRECT_STATUS"]=>  string(3) "200" 
["SCRIPT_URL"]=>  string(37) ...
["REDIRECT_REMOTE_USER"]=>  string(9) "andygeers"
... 
}
我不太清楚到底发生了什么事!这是在POST请求中生成的第一件事,它不会对这个特定的请求执行重定向


这是与CakePHP有关,还是只是PHP的一般问题?知道发生了什么事吗?我现在在互联网上发现了不少页面,这些页面表明重定向\远程\用户作为查找此值的地方是正常/常见的,但似乎没有人知道原因

这是一个通用的PHP东西。一些框架根据其路由策略在内部重定向页面。如果你在一个框架之外重定向,你会得到同样的结果

直接访问框架外的页面将为您提供最初期望的名称。 我确实注意到,在CodeIgniter中,您得到了
$\u服务器['REMOTE\u USER']
,并且没有重定向。因此,这取决于您使用的框架

因此,如果您不确定是否发生了重定向,最好检查这两种情况


我还注意到您正在使用
authvasuesbasic On
。如果您正在使用它,您还应该检查基本用户身份验证变量
$\u SERVER['USERNAME']
IIRC

Apache正在添加这些重定向前缀,以便脚本能够更好地处理发生的事情。对于我的应用程序,我编写了一个函数来处理这个问题。在我的例子中,它是类上的一个方法,但您可以轻松地将其转换为全局函数

class MyClass {
    /** @var integer How deep the redirect layers of Apache go. -1 means not set. */
    private $redirectLevel = -1;

    /**
     * Get an environment variable with all the REDIRECT_ prefixes stripped off
     */
    private function getEnv($var)
    {
        // Find out how deep the redirect goes
        if ($this->redirectLevel == -1) {
            reset($_SERVER);
            $key = key($_SERVER);
            $this->redirectLevel = substr_count($key, 'REDIRECT_');
        }

        $result = '';
        $prefix = '';
        for ($i = 0; $i < $this->redirectLevel + 1; $i++) {
            if (isset($_SERVER[$prefix . $var])) {
                $result = $_SERVER[$prefix . $var];
            }
            $prefix .= 'REDIRECT_';
        }
        return $result;
    }
}

我在上面编写的getEnv()函数将返回最上面的一个。

因为它可能是相关的:我在.htaccess文件中使用mod_rewrite,所有值是否都需要相同,而不管它们包含多少
重定向前缀?
$_SERVER['REDIRECT_REDIRECT_SSL_CLIENT_S_DN'] // string containing the subject
$_SERVER['REDIRECT_SSL_CLIENT_S_DN'] // exists, but empty
// $_SERVER['SSL_CLIENT_S_DN'] does not exist