有没有办法让PHP重定向到新页面,并传递HTTP-AUTH?
我一直在使用cURL,作为第二个例子: Sending basic authentication information via form
不幸的是,当我这样做时,实际的URL(显示在浏览器URL栏中)仍然是原始PHP的URL,而不是我正在浏览的目标。
这是我到目前为止所得到的:
<?php
$user = "xyz";
$pass = "abc";
$userpass = $user . ":" . $pass;
$url = "http://website/directory/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, $userpass);
$result = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode == 200){
header("Authorization: Basic " . base64_encode($userpass));
echo $result;
}else{
header("Location: http://website/login.php");
}
?>
我也试过更换上面的尾端:
if($httpcode == 200){
header("Authorization: Basic " . base64_encode($userpass));
header("Location: http://website/directory/");
}else{
header("Location: http://website/login.php");
}
但那失败了;它会重定向到http://website.xyz/directory,但它不会传递给用户/通行证,我会在到达时向服务器提供登录信息。
从技术上讲,以下工作原理。但是,我更喜欢比在HREF中传递user / pass更优雅的解决方案:
header("Location: http://" . $userpass . "website/directory/");
答案 0 :(得分:2)
尝试将身份验证与网址一起传递。像这样:
header('Location: http://username:password@website/directory/');
由于base64不像纯文本那样不安全,因此不应该是额外的安全风险。浏览器不会显示用户:传递地址栏中URL的相关部分。但浏览器将显示一个消息框(或其他内容),以便您确认是否要使用用户名登录此站点:yourusername
答案 1 :(得分:1)
您遇到的问题的解释:Authorization
标头仅在HTTP请求中有效。它在HTTP响应中没有任何意义,就像你放置它一样,因此浏览器忽略它。
您获得的解决方案(在URL中传递用户名和密码)与您将获得的解决方案一样好。没有其他选择。