Перейти к контенту
  • 0

как получить имя пользователя и его номер?


Elfet

Вопрос

Рекомендуемые сообщения

  • 0
member_id - вот так ид? это можно из кукеров достать без проблем?

Да, это можно из кукеров :D достать. Если оно там есть, конечно.

А потом уже, вооружившись полученным id, сделать SQL-запрос к таблице ibf_members. Оттуда и взять всю остальную инфу.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

theIggs

 

Да, это можно из кукеров  достать. Если оно там есть, конечно

Конечно не всегда оно там есть.

Как быть в этом случае (получить лог или ид)?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

theIggs

Какой такой лог?

Имя пользователя которое отображается в строке приветствия или его ид.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Pupil23

Хе... Если этого нет в куках, то перебросить пользователя на страницу авторизации и заставить авторизоваться. Иначе никак.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Elfet

сходи в index.php - яркий пример как это нужно делать. Даже могу подсказать в какой строчке это делается:

$ibforums->member     = $sess->authorise();

после этого массив $sess->member[] или $ibforums->member[] будут указывать на найденного пользователя или будут пустыми, если это гость.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

theIggs

Хе... Если этого нет в куках, то перебросить пользователя на страницу авторизации и заставить авторизоваться. Иначе никак.
Заставлять авторизовываться не хотел. Мне нужно было просто получить имя пользователя, чтоб вставить его на другую страницу (не форума). Впринципе авторизация происходит одинаково в версиях 1.3 и 2. Если нажать, на форуме, кнопку "ВХОД" - загрузится страница на которой можно выбрать: "не запоминать меня" тогда member_id будет отсутствовать. Точней его неуспеешь взять.

Если надо покажу пример.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Заставлять авторизовываться не хотел. Мне нужно было просто получить имя пользователя, чтоб вставить его на другую страницу (не форума).

Вам же объяснили, что если в куке пользователя нет его ид, то когда он заходит на Ваш сайт, его опознать не возможно, форум кстати его тоже не узнает, до тех пор пока он не автоизуется.

"не запоминать меня" тогда member_id будет отсутствовать. Точней его неуспеешь взять.

бред. Просто в таком случае кука держится до закрытия браузера, но она есть и member_id в ней тоже есть.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Vanish Конечно я всего незнаю, извини за беспокойство.

Конечно кука держится до закрытия браузера. Конечно я немного разобрался откуда взять имя пользователя и всё остальное. Если посмотреть порядок авторизации, то можно увидеть, что только один параметр остается без изменений.

Просто попутный вопрос: откуда берется список активных пользователей, скрытых пользователей на форуме.

Мне кажется что всё это берется из таблицы ibf_sessions. В ней ID это id_session.

Если пользователь авторизовался на форуме, не закрыл окно браузера, пошел на нужную мне страницу, можно сделать запрос к базе и получить имя.

Чтоб посмотреть какие переменные активны в какой момент можно в index.php форума, в самый верх поставить код и будет всё видно

 

<?
  echo "-- НАЧАЛО ПЕРЕМЕННЫХ GET --<br>";
  echo "-- ".dump_array($HTTP_GET_VARS)." --<br>";

  echo "-- НАЧАЛО ПЕРЕМЕННЫХ POST --<br>";
  echo "-- ".dump_array($HTTP_POST_VARS)." --<br>";

  echo "-- НАЧАЛО ПЕРЕМЕННЫХ СЕАНСА --<br>";
  echo "-- ".dump_array($HTTP_SESSION_VARS)." --<br>";

  echo "-- НАЧАЛО ПЕРЕМЕННЫХ COOKIE-НАБОРА --<br>";
  echo "-- ".dump_array($HTTP_COOKIE_VARS)." --<br>";

function dump_array($array)
{
  if(is_array($array))
  {
    $size = count($array);
    $string = "";
    if($size)
    {
      $count = 0;
      $string .= "{ ";
      foreach($array as $var => $value)
      {
        $string .= "$var = $value";
        if($count++ < ($size-1))
        {
          $string .= ", ";
        }
      }
      $string .= " }";
    }
    return $string;
  }
  else
  {
    return $array;
  }
}
?>

 

При этом желательно изменить ещё файл skin_global

в нём надо найти

function Redirect($Text, $Url, $css) {
global $ibforums;
return <<<EOF
<html>
<head>
<title>{$ibforums->lang['stand_by']}</title>
<meta http-equiv='refresh' content=2; url=$Url' />
<script type="text/javascript"> </script>
$css
</head>
<body>
<table width='100%' height='85%' align='center'>
<tr>
  <td valign='middle'>
  <table align='center' cellpadding="4" class="tablefill">
  <tr>
 <td width="100%" align="center">
   {$ibforums->lang['thanks']},
   $Text<br /><br />
   {$ibforums->lang['transfer_you']}<br /><br />
      (<a href='$Url'>{$ibforums->lang['dont_wait']}</a>)
    </td>
  </tr>
</table>
  </td>
</tr>
</table>
</body>
</html>
EOF;
}

В строке

<meta http-equiv='refresh' content=2; url=$Url' />

заменить значение с 2 на что нибудь большее, например на 120, а то пересылка происходит очень быстро.

Конечно на сервер переделанные страницы лучше не выкладывать, пробовать на домашнем.

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

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Просто попутный вопрос: откуда берется список активных пользователей, скрытых пользователей на форуме.

Мне кажется что всё это берется из таблицы ibf_sessions. В ней ID это id_session.

да именно так. При выводе в он-лайн списке используется эта таблица. При этом в этой таблице хранится и имя пользователя и его ид и тип логина (скрытый/нет), и всей этой информации сопоставляется id сессии.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Vanish Может я не прав, но тогда правильней будет делать так

<?
$aa=$HTTP_COOKIE_VARS['session_id'];
$db_for="имя базы форума";
$tab_nam="ibf_sessions";
$con=@mysql_connect("хост", "логин", "пароль")
or die("Подключение к MySQL - невозможно.");
$db=@mysql_select_db($db_for,$con)
or die("База невыбрана.");
$quer="select * from $tab_nam where  id ='$aa'";
$resu1=@mysql_query($quer, $con)
or die("Запрос невозможен.");
while ($row = mysql_fetch_array($resu1)){
$member_name=$row['member_name'];
$display_block .= "
<P><em>Имя: <strong>$member_name</strong></em></p>";
}
 print "$display_block";
?>

Т.е. разместить этот код на нужной странице и пользователь войдя на неё увидит своё имя (если не нажал на "выход" в форуме и не закрывал окно браузера). Конечно это просто рыба кода, но работает.

Ведь member_id может равняться нулю. А member_name может быть пустым - если пользователь нажал на выход. Имею ввиду таблицу ibf_sessions. Если member_name не пусто, то можно сделать запрос к другим таблицам.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
member_id может равняться нулю

В этом случае пользователь гостем зовется.

Если member_name не пусто, то можно сделать запрос к другим таблицам.

как раз смотреть то лучше по member_id

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Vanish

В этом случае пользователь гостем зовется

Втом идело, что авторизован пользователь, а member_id = 0. Правда такая штука бывает в Opera7.03, за IE этого не наблюдалось. Вот посмотри три варианта авторизации.

-- { CookieIp = 127.0.0.1, phpbb2mysql_data = a:0:{}, open_qr = 1, session_id = 9c7631ab60acadeb12a2ed3eef95414e, member_id = 1, pass_hash = f3618cb4a09d0f1d98a71fb7dd465115 } --


-- { CookieIp = 127.0.0.1, phpbb2mysql_data = a:0:{}, open_qr = 1, session_id = f0c60addb7f55744ad2b315dbda3e421 } --

-- { CookieIp = 127.0.0.1, phpbb2mysql_data = a:0:{}, open_qr = 1, forum_read = a:1:{i:1;i:1096826949;}, member_id = 0, pass_hash = 0, anonlogin = -1, session_id = 8885c8e915cfe0480380aa4a417bb7a6 } --

Ссылка на комментарий
Поделиться на других сайтах

  • 0
member_id = 0, pass_hash = 0, anonlogin = -1, session_id = 8885c8e915cfe0480380aa4a417bb7a6

гость, если сессия такая вышла или IP иной

 

session_id = 9c7631ab60acadeb12a2ed3eef95414e, member_id = 1, pass_hash = f3618cb4a09d0f1d98a71fb7dd465115

пользователь

 

session_id = f0c60addb7f55744ad2b315dbda3e421

гость, если сессия такая вышла или IP иной

Ссылка на комментарий
Поделиться на других сайтах

  • 0
В том и дело, что во всех трёх вариантах, пользователь авторизован нормально, не гость.

мммм. ладно объясню на пальцах механизм автологина в IPB.

 

Для того что бы пользователь был опознан необходимо:

Вариант А:

в куках пользователя или в URL'ах есть id сессии. Зовется она id_session. Пользователь с определенным id_session считается вошедшим в систему, если в таблице ibf_sessions найдется хотя бы одна запись удовлетворяющая условию id_session = id сессии нашего пользователя и ip_под_которым_стартовали_сессию = текущему ip пользователя.

 

Если такой записи не находится => пользователь превращается в гостя.

 

Дальше идет проверка member_id полученного из таблицы ibf_sessions по id сессии. Если пользователь с таким member_id существует в таблице ibf_members, то загружается вся информация о нем и он становится настоящим пользователем.

 

Вариант Б:

id сессии у нас нет, но есть в куках непустые записи member_id и pass_hash. Тогда пытаемся проверить существование пользователя в таблице ibf_members с таким member_id, который прописан в куках.

 

Если пользователя такого нет, превращаеся в гостя. Иначе проверяем хэши паролей того пользователя что мы получили из ibf_members с тем хэшем что мы получили из кук. Совпали хэши - законный пользователь, не совпали - гость.

 

Если случай не попадает ни под один вариант, то мы гость. А в таблице сессий ibf_sessions под нас так же создается сессия, но member_id у этой сессии равен 0. Это важное и принципиальное отличие сессии пользователя, от сессии гостя или поискового бота.

----------

Надеюсь поможет...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Vanish Только не ругайся (ну сильно не ругайся)....

С куками всё понятно. Если я сделаю страницу с этим кодом, то будет выведено имая пользователя. Это при условии, что пользователь авторизоваляся на форуме и не выходя перешёл на нужную страницу. Но такой код будет не полным, ведь пользователь может отключить куки и тогда $HTTP_COOKIE_VARS будет бесполезным. Если куков нет, то остаётся сессия, но $HTTP_SESSION_VARS не задействована, передача происходит $HTTP_GET_VARS - передаётся "S".

Конечно я только учусь и многого не знаю.

Пробовал проверить с помощью session_is_registered() вобщем ничего пока невышло, может сможешь объяснить как быть в этом случае (у пользователя куки отключены).

Ссылка на комментарий
Поделиться на других сайтах

  • 0

сессия создаваемая форумом не равна сессии создавемой session_start. Скажем так - это совершенно разные сессии и ничего общего между собой не имеют, потому

с помощью session_is_registered() вобщем ничего пока невышло

и к сожалению не выйдет, потому как вы правильно сказали что

Если куков нет, то остаётся сессия, но $HTTP_SESSION_VARS не задействована, передача происходит $HTTP_GET_VARS - передаётся "S".

что делать в этом случае? К сожалению если пользователь с самого начала заходит на вашу страницу, то ничего, если же он приходит с форума на вашу страницу, то вставить id сессии в адрес вашей страницы.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Vanish

с форума на вашу страницу, то вставить id сессии в адрес вашей страницы.
Ну да, это и надо. Но я этого не умею. Конечно, может дальнейшее следует спрашивать в форуме по прогаммированию, но вроде тут начали. Если не трудно, может поможете?

Сильно звиню - ступил... смутило слово сессия. Всё работает в обе стороны.

Большое спасибо

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Прошу прощения за реанимацию столь давней темы, но нужда заставила.

У меня примерно те же проблемы, но знаний намного меньше, а сделать нужно

Дело в том, что написал фотогалерею для форума (родная не работает уже несколько лет, как и кто бы не пытался ее восстановить). Но вот как получить из базы форума логины и сессии находящихся в данный момент пользователей, не знаю, поскольку с мускулом вообще не знаком. А без этого придется делать еще одну регистрацию, а это нафик никому не нужно.

Версия форума 2.2.2

Еще накладывается то, что не я хозяин форума и долго отлаживаться не дадут. Поэтому хочу уточнить по поводу кода, что приведен в этой же ветке - код

1. Как я понимаю, файл с ним должен находится на том же домене, что и форум.

2. Что будет находится в переменной $member_name, если пользователь не будет зареген? Думаю она будет не определена?

3. хост - это просто адрес сайта типа http://www.name.ru/?

Изменено пользователем Protva
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Данные о пользователе находятся в массиве $ibforums->member

Самому делать авторизацию нет смысла. Если ваша галлерея имеет собственный скрипт, то вставьте форумскую авторизацию в этот скрипт. А лучше, если делать всё через форумский функционал.

В частности есть такая вещь как плагины (act=modules), вызывается index.php, соответственно прозрачная авторизация + доступ ко всем библиотекам. А в самом модуле можете реализовать уже свою логику.

Пример смотри папку modules.

 

Авторизация берётся из куков, соответственно надо чтобы ваш скрипт (если всё-таки решитесь сделать через свой) мог эти куки форумские читать. Это должен быть либо тот же домен либо поддомен.

Вот здесь подробней: Авторизация пользователей в IPB из своих скриптов Проверка на пользователя в своём скрипте. Как?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Прочитал статью, что вы мне рекомендовали. Но, может я бестолково объяснил, мне не нужно делать авторизацию со страницы своего скрипта. Я лишь хочу получить ник пользователя, который зашел на мою страницу из форума.

Попробовал на локальном установил форум, поставил код, что приведен в этой ветке, но не получается, т.к. $HTTP_COOKIE_VARS['session_id'] почему-то не работает.

Нельзя это все же сделать как-то попроще?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Всё что я выше написал всё как раз о "Я лишь хочу получить ник пользователя, который зашел на мою страницу из форума."

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

Это и есть авторизация. Авторизация - это комплекс мер, направленный на узнавание пользователя форумом.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.