Невозможно войти в административный раздел (admincp)

Статус
В этой теме нельзя размещать новые ответы.
Мне в тот раз это помогло: Для просмотра ссылки Войди или Зарегистрируйся

Кстати, один раз не мог попасть в админку, потому что поставил очень большое значение на upload_max_filesize и post_max_size в php.ini.
Уменьшил значения и спокойно зашёл :)
 
Мне в тот раз это помогло: Для просмотра ссылки Войди или Зарегистрируйся

В моем tools.php такая строчка уже есть:

PHP:
$vbulletin->datastore->fetch($specialtemplates);

$type = $vbulletin->input->clean_gpc('r', 'type', TYPE_STR);

Кстати, один раз не мог попасть в админку, потому что поставил очень большое значение на upload_max_filesize и post_max_size в php.ini.
Уменьшил значения и спокойно зашёл :)

Эти значения не менялись, когда возникла проблема. Т.е. раньше при таких же значениях всё работало. Однако из интереса проверил. Сейчас оба параметра стоят в 32M. Попробовал 1M, ничего не изменилось - по прежнему не входит.

Господа, вопрос такой... Давайте попытаемся восстановить последовательность действий vB при логине в админке. Правильно ли я понимаю: при обращении к ./admincp/index.php включается файл ./global.php, который, в свою очередь, проверяет куки, посланные серверу клиентом, и определяет по этим кукам, считать ли, что пользователь авторизован (и, соответственно, продолжить ему показ ./admincp/index.php), либо же что он НЕ авторизован, и в таком случае перенаправить его header'ом `Location:` на скрипт ./login.php?

Если всё так, то мне интересно: какие именно куки (поимённо) смотрит ./global.php, и можно ли куда-нибудь там вставить var_dump (а точнее понятно, что можно, вопрос: куда?), чтобы посмотреть, что вообще ему посылает клиент, и, тем самым, возможно, понять, чего ему не хватает? Ведь за авторизацию пользователя в публичном разделе форума отвечает тот же ./global.php - так почему же для общего раздела он может прочитать необходимые куки, а для админки - нет? Возможно есть какая-то админко-специфичная кука, которой, собственно, и недостает?

P.S. Спасибо за ваше терпение и желание помочь.-)
 
Не совсем так. Во всех скриптах админки инклюдится файл /admincp/global.php, который проверяет наличие у пользователя куки cpsession, а также, если кука присутствует, имеется ли в таблице cpsession запись о ней.
Если да, то пускает в админку.
Если нет, то переводит на форму входа, которая ведет на /login.php, при этом, при успешном логине ставится эта кука cpsession.
Рекомендую поставить аддон для Firefox типа Add N Edit Cookies и смотреть за этой кукой, в частности смотреть, ставится-ли она, потом смотреть пишутся ли данные с этим хэшем в таблицу cpsession, если нет, то пробуй добавлять их руками в таблицу.
В /admincp/global.php например перед
PHP:
// ############################################ Start Login Check ####################################
ставь
PHP:
var_dump($vbulletin->GPC[COOKIE_PREFIX . 'cpsession']);
а также, на всякий случай,
PHP:
var_dump($_COOKIE[COOKIE_PREFIX . 'cpsession']);

Да, также, при отлове куки учти, что она называется не cpsession, а префиксcpsession, т.е. если в конфиге префикс cookie стоит bb (по умолчанию), то кука должна называться bbcpsession.
 
Спасибо! Это именно то, что было нужно.-)

Результат оказался весьма любопытным. С 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). Ей-свят, не трогал я ее, а кроме меня некому..
 
Конечно, Вы тут умные все... :( А что делать прочтым смертным? Я тож немогу залогиниться.. все точно так же, только после каждой неудачной попытки я вишу на форуме как админ, но поля входа на форум остаются. Если ввожу заново - опять спасибо и редирект на форум с пустыми полями, но! на форуме появляются гости!!! Налогинился так, что у меня на форуме столько небыло никогда посетителей! Ввел еще одно зарегистрированное имя и.. я уже на форуме, но поля ввода пароля опять пусты! В админку не пускает, редирект на поля ввода имени и пароля...

п.с. все директории перенес с другого хоста и полный дамп памяти... в конфиг.пхп базу исправил. Что дальше делать - не знаю... пробовал инсталяцией обновить... ничего не изменилось.. :(
 
…только после каждой неудачной попытки я вишу на форуме как админ, но поля входа на форум остаются…

Простите, а как это? По идее, если поля ввода логина/пароля отображаются — это значит, что вы не авторизованы. Почему вы считаете, что вы там залогинены как админ?

Если я правильно понимаю, у вас проблема не только при входе в админку, но и в публичную часть форума?

P.S. Я, конечно, понимаю, что это крайне маловероятно — но вы проверили в базе на предмет той проблемы, которая была у меня? Колонка «hash» в таблице «cpsession» имеет тип «varchar(32)»?

P.P.S. Кажется, в соседней теме вы писали, что меняли имя домена. В этом случае, я думаю, ваша проблема как раз-таки с настройками cookiepath/cookiedomain. Посмотрите в этой теме чуть выше про скрипт «tools.php».
 
Втом-то и прикол... логинюсь, появляюсь на форуме, но строки ввода имя/пароль пустые! делаю рефрешь - появляется гость, делаю 10рефрешей страници... уже 11 гостей!!!??+ я, админ. Как влезть в базу и как там править пока не понял, т.к. не програмист... пхпадмин использовал только для смены кодировки и загрузки/выгрузки базы. tools.php я запустил, но он требует Customer Number.. это что? номер пользователя как админа? единицу ввожу - ничего, а какой номер нужен-то?

Спасибо за ответ.

нашел в «cpsession» столбик хеш, там две строки одна из них db18989fbd774587032222dd4394ec43, вторая начинается с других букв -faf
ничего про var не видно

п.с. нашел varchar(32), когда редактирование нажал... и что делать? Две строки с юзерИД не много? мож удалить какую-то?
 
Втом-то и прикол... логинюсь, появляюсь на форуме, но строки ввода имя/пароль пустые! делаю рефрешь - появляется гость, делаю 10рефрешей страници... уже 11 гостей!!!??+ я, админ. Как влезть в базу и как там править пока не понял, т.к. не програмист... пхпадмин использовал только для смены кодировки и загрузки/выгрузки базы. tools.php я запустил, но он требует Customer Number.. это что? номер пользователя как админа? единицу ввожу - ничего, а какой номер нужен-то?

Спасибо за ответ.

Для работы с БД рекомендую те же две программы, которые, кажется, я уже упоминал в смежной теме: Для просмотра ссылки Войди или Зарегистрируйся либо Для просмотра ссылки Войди или Зарегистрируйся.

Последовательность действий такая (на примере SQLyog, в AquaDataStudio всё практически аналогично:(
  1. Скачиваете программу, устанавливаете.
  2. Регистрируете (обе коммерческие, прийдется искать кейгены, но сделать это несложно, их повсюду в изобилии).
  3. Подключаетесь к серверу (в вашем случае, очевидно, локальному — с вашим логином и паролем, очевидно, рутовыми).
  4. Выбираете в дереве навигации слева базу данных, которую использует ваш форум.
  5. Раскрываете эту подветку — видите там полный список таблиц БД. Ищете таблицу «cpsession» (у этой таблицы в имени будет тот же префикс, что и у всех таблиц в этой базе — такой, как задан в «includes/config.php»).
  6. Раскрываете подветку этой таблицы, в ней — подветку «Columns», и видите список колонок (атрибутов) этой таблицы.
  7. Ищете там колонку «hash» (собственно, ее и искать нечего — в таблице «cpsession» всего три колонки-)), и смотрите, что после нее написано в квадратных скобочках.
Если
Код:
[varchar(32), NOTNULL]
— то всё в порядке.
Если после «varchar» в скобочках стоит какое-то другое число (особенно меньшее) — значит у вас та же проблема, что у меня. Если это так, отпишите, прокомментирую подробнее, как исправить.

Что касается Customer ID, который у вас спрашивает ваш tools.php — у вас была версия форума с кейгеном? Если да, то кейген дожлен был выдать вам сгенерированную лицензионную информацию, примерно такого вида:

Licence Number: XXXXXXXXXX
Customer Number: XXXXXXXXXXXX
Date: 23:30, Fri Feb 15th 2008

Вместо иксов, понятное дело, конкретные номера. Вот вам нужен тот Customer Number, который выдавал кейген. Если не запомнили/не записали — прийдется повторять «чистую» установку форума, и заново применять кейген (на этот раз пометив лицензионную информацию).
 
Открыв в пхпадмине базу и ту строку, я увидел varchar(32), т.е. то, что нужно? Тогда ситуация не как у Вас... :( Форум у меня отсюда, нуленый, так что без всяких кейгенов... :(
Одного я добиться сумел.. Это зашел под именем одного из пользователей (мною же созданным ранее на другом хосте)! Не знаю как получилось, но зашел и строки логирования пропали наконец.

все действия провожу на реальном хосте, а не на локалке.
вот так вот...

Забыл сказать.. если пытаюсь воспользоваться функцией восстановления пароля, то приходят ссылки на старый хост... так что не воспользоваться..

п.с. Ура-а-ааа, я залогинился админом на форуме!!!!!!!!!!:thenks: Просто заново сделал дамп базы (пхпадмином) и перенес на новый хостинг.
Но... в админке по-прежнему редирект на страницу форума происходит, но я там остаюсь залогиненым... Строку, как я уже писал - проверил. тоже самое происходит, если логинтся второй админ (прав поменьше), но его и на форуме не логинит, как и меня до этого...
 
Но... в админке по-прежнему редирект на страницу форума происходит, но я там остаюсь залогиненым... Строку, как я уже писал - проверил. тоже самое происходит, если логинтся второй админ (прав поменьше), но его и на форуме не логинит, как и меня до этого...

Попробуйте мой tools.php:



Может не будет требовать у вас Client ID. У меня, по-моему, не требовал. Правда, он у меня от версии 3.6.8.PL2, но вроде нормально работал с форумом 3.7.x.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху