首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HTTP-AUTH重定向?

使用HTTP-AUTH重定向?
EN

Stack Overflow用户
提问于 2013-04-05 01:48:05
回答 2查看 6K关注 0票数 5

有没有办法让PHP重定向到一个新页面,并传递HTTP-AUTH?

我一直使用cURL作为这里的第二个示例:Sending basic authentication information via form

不幸的是,当我这样做时,实际的URL (显示在浏览器地址栏中)仍然是原始PHP的URL,而不是我正在浏览的目标。

这是我到目前为止所得到的:

代码语言:javascript
复制
<?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");
}

?>

我还尝试了替换上面的尾部:

代码语言:javascript
复制
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:

代码语言:javascript
复制
header("Location: http://" . $userpass . "website/directory/");
EN

回答 2

Stack Overflow用户

发布于 2013-04-05 02:15:59

尝试将身份验证与url一起传递。如下所示:

代码语言:javascript
复制
header('Location: http://username:password@website/directory/');

由于base64和纯文本一样不安全,所以它不应该成为额外的安全风险。浏览器将不会显示用户:在地址栏中传递url的相关部分。但浏览器将显示一个消息框(或其他内容),让您确认您将使用用户名: yourusername登录到此站点

票数 3
EN

Stack Overflow用户

发布于 2013-04-05 04:25:26

对您所遇到的问题的解释:HTTP头只在Authorization请求中有效。它在HTTP响应中没有任何意义,就像您放置它的位置一样,因此浏览器会忽略它。

你得到的解决方案(在URL中传递用户名和密码)已经和你能得到的一样好了。没有其他选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15818159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档