2013-04-04 3 views
3

Есть ли способ перенаправить PHP на новую страницу и передать HTTP-AUTH?Использовать HTTP-AUTH для перенаправления?

Я использую локон, в качестве второго примера здесь: Sending basic authentication information via form

К сожалению, когда я делаю это, фактический URL (как показано в строке браузера URL) остается 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:

header("Location: http://" . $userpass . "website/directory/"); 

ответ

1

Попробуйте пройти проверку подлинности вместе с URL. Примерно так:

header('Location: http://username:[email protected]/directory/'); 

Поскольку base64 небезопасен, как обычный текст, это не должно быть дополнительным риском для безопасности. Браузеры не будут отображать пользователя: передать связанную часть URL-адреса в адресной строке. Но браузер отобразит окно сообщения (или что-то еще), чтобы подтвердить, что вы собираетесь входить в этот сайт с использованием имени пользователя: yourusername

+0

Я тоже думал об этом. По-видимому, он не передает HTTP-AUTH на новую страницу при перенаправлении; Я все еще запрашиваю веб-сервер для пользователя/передаю, когда вы попадаете в новое место. – ltwally

+1

Вы уверены, что веб-сайт, на который вы перенаправляете, принимает ваши учетные данные? Я тестировал его на localhost с двумя разными папками, и он работал – hek2mgl

+1

. Я смотрю на свой код выше и заменяю «echo $ result;» с "header ('Location: http: // website/directory')", вот что я пробовал. Это не удалось. По прибытии в http: // website/directory/мне было предложено приглашение для входа. – ltwally

1

Объяснение проблемы, которую вы имеете: заголовок Authorization действителен в HTTP-запросах. Он не имеет никакого смысла в ответе HTTP, например, когда вы его помещаете, и, следовательно, браузеры игнорируют его.

Решение, которое вам дано (передача имени пользователя и пароля в URL-адресе) так же хорошо, как вы собираетесь получить. Альтернативы нет.