有没有办法让PHP重定向到一个新页面,并传递HTTP-AUTH?
我一直使用cURL作为这里的第二个示例:Sending basic authentication information via form
不幸的是,当我这样做时,实际的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,但没有传入user/ pass,并且在到达时显示来自服务器的登录。
从技术上讲,下面的方法是可行的。然而,我更喜欢一种更优雅的解决方案,而不是在HREF中传递user/pass:
header("Location: http://" . $userpass . "website/directory/");发布于 2013-04-05 02:15:59
尝试将身份验证与url一起传递。如下所示:
header('Location: http://username:password@website/directory/');由于base64和纯文本一样不安全,所以它不应该成为额外的安全风险。浏览器将不会显示用户:在地址栏中传递url的相关部分。但浏览器将显示一个消息框(或其他内容),让您确认您将使用用户名: yourusername登录到此站点
发布于 2013-04-05 04:25:26
对您所遇到的问题的解释:HTTP头只在Authorization请求中有效。它在HTTP响应中没有任何意义,就像您放置它的位置一样,因此浏览器会忽略它。
你得到的解决方案(在URL中传递用户名和密码)已经和你能得到的一样好了。没有其他选择。
https://stackoverflow.com/questions/15818159
复制相似问题