Спасибо! Это именно то, что было нужно.-)
Результат оказался весьма любопытным. С var_dump'ами не получилось. По какой-то непонятной причине ни var_dump'ы, ни echo не срабатывают, ни если их писать в том месте, где вы сказали, ни даже если писать в самом начале файла: по всей видимости какой-то участок кода ниже каким-то хитрым способом сбрасывает всё что было послано на вывод, и начинает строить страницу vBulletin'а "с чистого листа". Работает только если писать die('...'); - тогда аутпут можно увидеть.
Однако я обошёл это, сделав дамп другим способом - используя вывод результатов в файл, а не в браузер. И вот что поразительно! Переменная
$_COOKIE (в формате вывода функции print_r) имеет вид:
Код:
Array
(
[vbpassword] => ***
[vblastvisit] => 1201651504
[vbuserid] => 1
[vblastactivity] => 0
[vbsessionhash] => ***
[vbcpsession] => ***
[vbulletin_collapse] =>
[vbreferrerid] => 0
[vbthreadedmode] =>
[vbstyleid] => 0
[vblanguageid] => 0
)
А
$vbulletin->GPC -
Код:
Array
(
[vbulletin_collapse] =>
[vbreferrerid] => 0
[vbuserid] => 1
[vbpassword] => ***
[vblastvisit] => 1201651504
[vblastactivity] => 0
[vbthreadedmode] =>
[vbsessionhash] => ***
[vbstyleid] => 0
[vblanguageid] => 0
[s] =>
[styleid] => 0
[langid] => 0
)
Т.е. в
$_COOKIE переменная
vbcpsession есть, а в
$vbulletin->GPC она таинственным образом пропадает! Возникает вопрос: почему? Где формируется массив
$vbulletin->GPC? И еще интересно, откуда в нём появляются дополнительные ключи
s,
styleid,
langid, которых не было в $_COOKIE? И почему они без префикса?
Добавлено через 11 минут
А странно... Если после строчки:
PHP:
if (!empty($vbulletin->GPC[COOKIE_PREFIX . 'cpsession']))
{
добавить:
PHP:
die(print_r($vbulletin->GPC[COOKIE_PREFIX . 'cpsession'],true));
то
cpsession чудесным образом появляется в массиве
$vbulletin->GPC... Видимо, его туда добавляет строчка:
PHP:
$vbulletin->input->clean_array_gpc('c', array(
COOKIE_PREFIX . 'cpsession' => TYPE_STR,
));
Зато если поставить
PHP:
die(print_r($cpsession,true));
после:
PHP:
$cpsession = $db->query_first("
SELECT * FROM " . TABLE_PREFIX . "cpsession
WHERE userid = " . $vbulletin->userinfo['userid'] . "
AND hash = '" . $db->escape_string($vbulletin->GPC[COOKIE_PREFIX . 'cpsession']) . "'
AND dateline > " . iif($vbulletin->options['timeoutcontrolpanel'], intval(TIMENOW - $vbulletin->options['cookietimeout']), intval(TIMENOW - 3600))
);
то тут уже оказывается пусто...
Добавлено через 14 минут
Влез в БД, в таблицу cpsession... Хмм... А это нормально, что у меня все хэши в ней имеют длину 11 символов, а не 32, и вообще колонка hash объявлена как varchar(11)? Между прочим, последня запись в этой таблице как раз содержит первые 11 символов от хэша из куки cpsession.
Добавлено через 19 минут
P.S. Проблема решена! Сделал alter table, изменил колонку hash на varchar(32); сделал truncate table, перелогинился в админку - всё вошло!
g0rn, огромное спасибо за помощь, без вас бы никогда не нашёл концы, с которых можно было бы начать распутывать.
И, честно говоря, ума не приложу, каким образом колонка стала varchar(11). Ей-свят, не трогал я ее, а кроме меня некому..