Я не могу комментировать сообщение Джона из-за отсутствия привилегий, поэтому я публикую новый ответ, чтобы подробно рассказать о его использовании MediaWiki API и передаче файлов cookie. Надеюсь, это кому-нибудь поможет.
Вы можете использовать библиотеку PHP cURL для передачи значения cookie сеанса в качестве файла cookie на страницу api.php в вашей вики (вам нужно создать полный URL-адрес для cURL, чтобы получить страницу). Имя файла cookie сеанса - это либо значение $ wgSessionCookie (которое по умолчанию установлено в false и не используется), либо $wgCookiePrefix . '_session'
(по умолчанию для $ wgCookiePrefix установлено значение false и по умолчанию используется имя базы данных). Поэтому, исходя из ваших настроек, используйте соответствующее значение.
Я использую api.php?action=query&format=xml&meta=userinfo
, а затем ищу идентификатор пользователя, который возвращается в вики (Примечание format = xml ). Идентификатор 0 означает, что пользователь является анонимным.
Вот полный код функции, которую я использую (я понимаю, что не проверяю некоторые возможные состояния ошибки). Возможно, вам придется изменить значение $ session_cookie
function isLoggedIn()
{
$session_cookie = 'wikidb_session';
if(!isset($_COOKIE[$session_cookie]))
{
return false;
}
$url = ((isset($_SERVER['HTTPS']))?'https://':'http://') .
$_SERVER['HTTP_HOST'] .
(($_SERVER['SERVER_PORT'] != 80)?':' . $_SERVER['SERVER_PORT']:'') .
'/wiki/api.php?action=query&format=xml&meta=userinfo';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIE, $session_cookie . '=' . $_COOKIE[$session_cookie]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$ret = curl_exec($ch);
curl_close($ch);
return preg_match('/id="(\d+)"/',$ret,$id) && $id[1];
}
Примечание. Если вы только проверяете, возвращается ли anon = "" или id = "0" вызовом api.php, в случае, если вызов возвращает что-то неожиданное или api.php отсутствует в URL, функция сообщит о том, что пользователь вошел в систему, поэтому лучше проверить возвращаемый идентификатор.