Как создать сессию с php curl в MediaWiki API

Я работаю над API MediaWiki, и я хочу создать пользовательский логин с API. Я сослался на это ссылка на сайт. Но я не могу создать сессию.

вот мой код

первый шаг

я создал идентификатор сеанса с этим

session_start();
$data = "action=login&lgname=Wiki&lgpassword=gjnlt&lgtoken=5ae555656110dd20a2b0504e4d7e35e0";  // login
$result=call($data);   // get the session id
function call($data=null)
{
$ch = curl_init('http://192.168.1.32/Eb_new/mediawiki/api.php?format=json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: application/json',
'Content-Length: ' . strlen($data))
);

$result = curl_exec($ch);
return $result=json_decode($result);
}

Я получил ответ.

{"login":{"result":"Success","lguserid":5,"lgusername":"Wiki","lgtoken":"d85fd0201276632858ce4ad3ac351de4","cookieprefix":"EB_new_wiki_","sessionid":"3b8cdab43d4cda6b4548a3cc27604e20"}}

второй шаг

теперь у меня есть идентификатор сеанса в $result->login->sessionid . Чтобы установить сеанс, я сделал еще один вызов, чтобы установить сеанс, как это

setsession($result->login->sessionid);   // set the session

function setsession($sessionid)
{
$field_array= array(
'Accept' => 'HTTP_ACCEPT',
'Accept-Charset' => 'HTTP_ACCEPT_CHARSET',
'Accept-Encoding' => 'HTTP_ACCEPT_ENCODING',
'Accept-Language' => 'HTTP_ACCEPT_LANGUAGE',
'Connection' => 'HTTP_CONNECTION',
'Host' => 'HTTP_HOST',
'Referer' => 'HTTP_REFERER',
'User-Agent' => 'HTTP_USER_AGENT',
'Set-Cookie'=>'enwikiSession='.$sessionid.' ;domain=http://192.168.1.32/Eb_new/mediawiki'
);

$curl_request_headers=array();

foreach ($field_array as $key => $value) {
if(isset($_SERVER["$value"])) {
$server_value=$_SERVER["$value"];
$curl_request_headers[]="$key: $server_value";
}
};
$curl_request_headers[]="Expect: ";

session_write_close();
$data = "action=login&lgname=Wiki&lgpassword=gjnlt&lgtoken=5ae555656110dd20a2b0504e4d7e35e0";  // login
$ch = curl_init('http://192.168.1.32/Eb_new/mediawiki/api.php?format=json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $curl_request_headers);
//curl_setopt($curl_handle, CURLOPT_COOKIE, 'enwikiSession='.$sessionid.' ;domain=http://192.168.1.32/Eb_new/mediawiki');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
echo $result = curl_exec($ch);
}

но пользователь не залогинен. Где я не прав. любая помощь будет оценена. Спасибо

0

Решение

Структура запроса на вход

Отправить запрос на вход в систему с помощью POST (GET-запросы приведут к ошибке).

api.php? действие = Войти&lgname = Bob&lgpassword = secret [попробуйте в [ApiSandbox] ] [1] Результат

{
"login": {
"result": "NeedToken",
"token": "b5780b6e2f27e20b450921d9461010b4",
"cookieprefix": "enwiki",
"sessionid": "17ab96bd8ffbe8ca58a78657a918558e"}
}

Тело POST может быть пустым. Этот запрос также вернет сессионный куки в заголовке HTTP

(Set-Cookie: enwikiSession=17ab96bd8ffbe8ca58a78657a918558e; path=/; domain=.wikipedia.org; HttpOnly)

что вы должны вернуть для второго запроса, если ваша структура не делает это автоматически. Параметр sessionid был добавлен в MediaWiki 1.17 и более поздних версиях.

https://en.wikipedia.org/wiki/Special:ApiSandbox#action=login&lgname = Bob&lgpassword = секрет

0

Другие решения

Я обнаружил, что вы не начали сессию в коде выше.

Вам нужно добавить session_start() на каждой странице, где вы хотите восстановить значение сеанса или же установить значение для сессии.

ссылка

0

По вопросам рекламы [email protected]