Я разрабатываю приложение для сайта клиента.Вот история, эта компания использует приложение / HDD, называемое synology, которое в основном представляет собой блок жесткого диска, подключенный к Интернету, и предоставляет доступ к файлам клиентам с предварительно созданными учетными записями.Этот интерфейс написан на CGI, и у меня нет доступа к коробке (отличной сети и местоположения от веб-сайта).
Что мы хотим сделать, так это разрешить вход в систему с основного веб-сайта (я создаю) в обход(по крайней мере, для пользователей: D) форма входа в приложение.
Я, очевидно, не могу сделать ajax-запрос jQuery для разных доменов, он не будет работать.Итак, что я сделал, это
1) Форма на веб-сайте, работающем с jQuery:
$("#login_submit").click(function(){
var username= $("input#login_username").val();
var passwd= $("input#login_passwd").val();
var post_string = "username=" + username + "&passwd=" + passwd ;
$.ajax({
type : "POST",
url: "login.php",
data : post_string,
success: function(response){
if (response){
$('.result').html("OK");
window.location = "http://XX.XX.net:5000/webman/index.cgi";
}
else {
$('.result').html("INVALID");
}
}
})
return false;
}
2) Позвоните на страницу login.php при передаче имени пользователя и паролячерез POST страница PHP отправляет HTTP-запрос POST на удаленный сервер Synology и дает мне ответ в JSON, очевидно (?), что я конвертирую в массив PHP, чтобы я мог видеть, является ли ключ «success» истинным или ложным,если true, код jquery напечатает сообщение OK и перенаправит на удаленный сервер sylonogy, где я смогу получить доступ к моим данным, зарегистрированным в системе!
<?php
function do_post_request($url, $data, $optional_headers = null)
{
$params = array('http' => array(
'method' => 'POST',
'content' => $data
));
if ($optional_headers !== null) {
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url, $php_errormsg");
}
return $response;
}
if ($_SERVER['REQUEST_METHOD'] == "POST"){
$username = $_POST["username"];
$passwd = $_POST["passwd"];
$response =json_decode(do_post_request($url = "http://XX.XX.net:5000/webman/login.cgi", $data = "username=".$username."&passwd=".$passwd), true);
if($response["success"]){
$send = true;
}
else {
$send = false;
}
echo $send;
}
Проблема здесь в том, что login.cgi страница должна установить cookie-файл сеанса для этого сервера, но с использованием этого PHP-запроса это не так.Он даст ответ, но не установит cookie для браузера.Есть ли у вас какие-либо идеи, что я могу сделать, чтобы имитировать запрос браузера POST и установить cookie, поддерживая эту функцию jquery?может мне стоит установить заголовки?Если создать для этой простой формы login.cgi в качестве «действия», файл cookie сеанса будет сохранен, но пользователь, конечно, останется на той странице, которую я не могу изменить, поскольку у меня нет к ней доступа.