SShady Опубликовано 23 Июля 2007 Жалоба Поделиться Опубликовано 23 Июля 2007 Вот возник вопрос. Суть в следующем: пишу свою цмс для личных нужд. Хотел бы чтобы у меня была регистрация, но без собственых полей. Как и в каком формате писать в базу я уже знаю, как генерится пароль тоже. Но суть не в этом. Т.к. форум размещен forum.[mysite].ru я немогу нормально писать и читать куки для того чтобы осуществить автозаход, когда человек заходит на мой сайт. Т.е. чтобы заходя в форум он бы был уже авторизован набрав до этого имя и пароль на сайте. Описал проблемку конечно коряво но как смог. Подскажите плиз вариантик. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Garret Опубликовано 25 Июля 2007 Жалоба Поделиться Опубликовано 25 Июля 2007 Ставь куку на все поддомены. .mysite.ru Тогда сможешь читать и на сайте и на форуме. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
rkit Опубликовано 14 Августа 2007 Жалоба Поделиться Опубликовано 14 Августа 2007 При авторизации на форуме (IPB 2.2), в куки создается такой ключ:ipb_stronghold Со значением, примерно таким:68afa57d0677ea09426d214968f7e10b Поэтому при авторизации на сайте (делаю связку своего сайта с форумом), на форуме не авторизуется.IPB проверяет это ключ. Но как он создается я незнаю.В базе (на всякий случай) все проверил такого значения нет. Может кто знает? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 14 Августа 2007 Жалоба Поделиться Опубликовано 14 Августа 2007 Это спец кука для увеличения защиты. Не разбирал подробно код, но скорее всего поможет отключение "Безопасных куков" в настройках безопасности форума, тем более что с ним г8люки на некоторых браузерах. Посмотрите в ./sources/ipsclass.php, алгоритм генерации несложный: $ip_octets = explode( ".", $this->my_getenv('REMOTE_ADDR') ); $crypt_salt = md5( $this->vars['sql_pass'].$this->vars['sql_user'] ); //----------------------------------------- // Put it together.... //----------------------------------------- $stronghold = md5( md5( $member_id . "-" . $ip_octets[0] . '-' . $ip_octets[1] . '-' . $member_log_in_key ) . $crypt_salt ); //----------------------------------------- // Set cookie //----------------------------------------- $this->my_setcookie( 'ipb_stronghold', $stronghold, 1 ); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
rkit Опубликовано 14 Августа 2007 Жалоба Поделиться Опубликовано 14 Августа 2007 Sannis, спасибо большое. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
vitovt Опубликовано 16 Августа 2007 Жалоба Поделиться Опубликовано 16 Августа 2007 а может кто-нить подскажет как и где хранятся пароли в ИБ? просто хочу сделать авторизацию единую на всем сайте через форум, плюс отдельную страницу на сайте с регистрацией нового пользователя, но так чтобы без захода на сам форум, т.е просто скрипт будет писать все нужные данные в базу форума и все. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
rkit Опубликовано 22 Августа 2007 Жалоба Поделиться Опубликовано 22 Августа 2007 Вот мой код авторизации на сайте. if(!empty($_COOKIE['member_id'])) { # $user_id = $_COOKIE['member_id']; $user_password = $_COOKIE['pass_hash']; $check_query = "SELECT * FROM ibf_members WHERE id = ".(int)$user_id." AND member_login_key = '$user_password'"; $check = mysql_query($check_query) or die("Ошибка подключения!<br>"); if ($check) { $check_ok = 1; } else { $check_ok = 0; } if ($check_ok == 1) { $user_data = mysql_fetch_array($check); $user_name = $user_data['name']; $user_email = $user_data['email']; $user_joined = $user_data['joined']; $user_login_key = $user_data['member_login_key']; $user_align = $user_data['mgroup']; $md5_key = md5($user_email.'&'.$user_login_key.'&'.$user_joined); $_SESSION['search'] = 'all'; $_SESSION['clubname'] = $user_data['name']; $_SESSION['terminal'] = 'yes1'; Header("Location: account_all.php"); } # if($check_ok != 1) { echo "Доступ запрещен!"; include("form/reg.php"); exit; } } else { echo ''; } ############ if (isset($_POST['submit'])) { session_start(); require_once("!stp/install.php"); $db = mysql_connect($host,$user,$pass); mysql_select_db($base2, $db); $sql = "SELECT ibf_members.id, ibf_members.mgroup, ibf_members.name, ibf_members.email FROM ibf_members LEFT JOIN ibf_groups ON ibf_members.mgroup = ibf_groups.g_id WHERE ibf_members.name = '".mysql_real_escape_string($_POST['login'])."'"; $res = mysql_query($sql); if (mysql_num_rows($res) == 0) { echo ' Доступ запрещен !'; $sca = '0'; } else { $info = mysql_fetch_assoc($res); $_SESSION['cn'] = $info[name]; } if ($sca <> '0') { $sql = "SELECT converge_id, converge_pass_hash, converge_pass_salt FROM ibf_members_converge WHERE converge_email = '".$info['email']."'"; $res = mysql_query($sql); $converge = mysql_fetch_array($res); if ($converge['converge_pass_hash'] == (md5(md5($converge['converge_pass_salt']).md5($_POST['pass'])))) { $_SESSION['search'] = 'all'; $_SESSION['clubname'] = $_SESSION['cn']; $_SESSION['terminal'] = 'yes1'; ###########SET_COOKIE########## $sql_c = "SELECT member_login_key,id FROM `ibf_members` WHERE id = '".(int)$info['id']."'"; $res2 = mysql_query($sql_c); while ($dcook = mysql_fetch_array($res2)) { ########### setcookie('member_id',$dcook[id],time() + 3600*9999, "/"); setcookie('pass_hash',$dcook[member_login_key],time() + 3600*9999, "/"); setcookie('coppa','0',time()+3600*9999, "/"); setcookie('anonlogin','-1',time()+3600*9999, "/"); Header("Location: account_all.php"); } } else { echo ' Доступ запрещен !'; } } } Если мы авторизируемся на сайте, то на форуме мы тоже авторизируемся автоматически.И наоборот. Все было бы супер, если бы не один маленький баг.Когда мы "выйдем" через форум. ( Нажмем кнопку "Выход" )и снова зайдем через сайт. На форуме мы останемся не авторизированы.А на сайте все нормально. При выходе через форум создается в куки anonlogin = -1И если после выхода на форуме мы зайдем через форум. То все равно в куки остается anonlogin = -1 Незнаю даже что делать ... Кстати кто нить знает что за "coppa" cоздается в куки. Оно всегда равно 0. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 22 Августа 2007 Жалоба Поделиться Опубликовано 22 Августа 2007 Незнаю даже что делать ...поставь домен куков для форума и сайта Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
rkit Опубликовано 22 Августа 2007 Жалоба Поделиться Опубликовано 22 Августа 2007 Всмысле единный домен...Тоесть допустим setcookie('member_id',$dcook[id],time() + 3600*9999, "http://site.ru");А как для форума поставить?Извиниюсь, но не понял идеи.. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 23 Августа 2007 Жалоба Поделиться Опубликовано 23 Августа 2007 В админке есть настройки куков.Там можно выставить единый домен для куков. В твоей цмс когда делаешь авторизацию также нужно читать и сохранять куки, применяя параметр "домен куков" Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
rkit Опубликовано 23 Августа 2007 Жалоба Поделиться Опубликовано 23 Августа 2007 Понял спасибо Song! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
rkit Опубликовано 24 Августа 2007 Жалоба Поделиться Опубликовано 24 Августа 2007 Все равно не работает. Сегодня залил на сервак и проверил. В админцентре форума прописал: Домен куки: .p2p.a42.ruПуть куки: / У себя на сайте, создаю куки так: setcookie('member_id',$dcook[id],time()+60*60*24*30, "/", ".p2p.a42.ru"); setcookie('pass_hash',$dcook[member_login_key],time()+60*60*24*30, "/", ".p2p.a42.ru"); setcookie('coppa','0',time()+60*60*24*30, "/", ".p2p.a42.ru"); При авторизации на сайте, на форуме авторизируется.Но если выйти через форум, и зайти через сайт. На форуме не авторизируемся. При выходе создается ключ в куки anonlogin = -1Может что с ним? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 24 Августа 2007 Жалоба Поделиться Опубликовано 24 Августа 2007 ну тогда трассируй форум, class_session и поймёшь где он вылетает. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
SShady Опубликовано 31 Августа 2007 Автор Жалоба Поделиться Опубликовано 31 Августа 2007 Сделал авторизацию... Сейчас покажу =) это файл ib.php<? // Интеграция IPB 2.3.0 с чем угодно =) // Сделайте include('ib.php'); в Ваш проект. ?> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Site.ru</title> <script src="ajax.js" type="text/javascript"></script> <style type="text/css"> <!-- #4romIPB { border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; } --> </style> </head> <body> <iframe src="http://forum.site.ru/ib.php" id="4romIPB" width=160 height="100"></iframe> <script> // можно с фреймом как выше сделано а можно аякс юзать это как ниже откоментированно var WinObj=document.getElementById('4romIPB'); var MessageObjTwo=WinObj.document.getElementById('IPB_TEXT'); alert(MessageObjTwo); // makeRequest("http://forum.site.ru/ib.php","4romIPB"); </script> </body> </html> это у нас файлик лежащий в дирректории с форумом (в моем случае поддомен это папка в корне моего домена )<? Error_Reporting(E_ALL & ~E_NOTICE); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 $ipbdbhost = ""; // домен БД $ipbdbuser = ""; // пользователь БД $ipbdbpass = ""; // пароль к БД $ipbdb = ""; // имя БД mysql_connect("localhost","$ipbdbuser","$ipbdbpass"); // Конектимся к серверу mysql_select_db("$ipbdb") or die("Can't select from base'"); // проверка на существования базы if ((isset($login)) and ($login=="ok")) { // ВСЕ ХОРОШО, ДЕЛАЕМ КУКУ И ОТПРАВЛЯЕМ ЧЕЛОВЕКА ОБРАТНО session_start(); $ip_octets = explode(".", getenv('REMOTE_ADDR')); if (empty($ip_octets[0])) {$ip_octets[0]="127"; $ip_octets[1]="0";} $crypt_salt = md5($ipbdbpass . $ipbdbuser); $stronghold=md5(md5($mid."-".$ip_octets[0].'-'.$ip_octets[1].'-'.$ph).$crypt_salt ); // вот тут видим что этот стронгхолд это хренотень сделанная из айпишника, сам долго думал. setcookie("ipb_stronghold", $stronghold, time()+31536000, "*", "forum.site.ru", 0); setcookie("pass_hash", $ph, time()+31536000, "*", "forum.site.ru", 0); setcookie("coppa", "0", time()+31536000, "*", "forum.site.ru", 0); setcookie("member_id", $mid, time()+31536000, "*", "forum.site.ru", 0); setcookie("anonlogin", "-1", time()+31536000, "*", "forum.site.ru", 0); $session_id = addslashes( substr( trim( session_id() ), 0, 32 ) ); setcookie("session_id", $session_id, time()+31536000, "*", "forum.site.ru", 0); echo "<script>window.location.href=\"ib.php\"</script>"; } if ((isset($logout)) and ($logout=="ok")) { setcookie("coppa", "", time() - 3600); setcookie("session_id", "", time() - 3600); setcookie("ipb_stronghold", "", time() - 3600); setcookie("ipb_admin_session_id", "", time() - 3600); setcookie("pass_hash", "", time() - 3600); if (!$_COOKIE['session_id']) {echo "<script>window.location.href=\"ib.php\"</script>";} else {echo "<script>location.reload()</script>";} } // это так для проверок //echo "pass_hash: ".$_COOKIE['pass_hash']."<br>"; //echo "anonlogin: ".$_COOKIE['anonlogin']."<br>"; //echo "coppa: ".$_COOKIE['coppa']."<br>"; //echo "ipb_stronghold: ".$_COOKIE['ipb_stronghold']."<br>"; //echo "member_id: ".$_COOKIE['member_id']."<br>"; //echo "session_id: ".$_COOKIE['session_id']."<br>"; if ((isset($_COOKIE['pass_hash'])) and (!empty($_COOKIE['pass_hash']))) { $phash=$_COOKIE['pass_hash']; $result=mysql_query("SELECT * FROM ibf_members WHERE `member_login_key` = '$phash'") or die("!E:".mysql_error()); while($value = mysql_fetch_row($result)) { echo "<b>$value[1]</b> <a href=\"?logout=ok\">выход</a>"; } } else { ?> <form method="POST" target="_self" id="reg_form" enctype="application/x-www-form-urlencoded"> <table width="100" border=0><tr> <td colspan=2><input name="name" value="Shady"><br> <input name="pass" value="qazwsx" type="password"></td></tr> <tr><td align=center><a href="#" onclick="document.getElementById('reg_form').submit(); return false;">вход</a></td><td align=center><a href="http://forum.site.ru/index.php?act=Reg&CODE=00">регистрация</a></td></tr></table> </form> <? // смотрим id для мешка соли $result=mysql_query("SELECT * FROM ibf_members WHERE `name` = '$name'") or die("!E:".mysql_error()); while($value = mysql_fetch_row($result)) { $mail=$value[3]; } // смотрим по id что за мешок с солью $result=mysql_query("SELECT * FROM ibf_members_converge WHERE `converge_email` = '$mail'") or die("!E:".mysql_error()); $value = mysql_fetch_row($result); $salt=$value[4]; // делаем кашу с солью =) $phash=md5(md5($salt).md5($pass)); function get_pass_hash($id) { global $db; $result=mysql_query("SELECT member_login_key FROM ibf_members WHERE `id` = '$id'") or die("!E:".mysql_error()); $value = mysql_fetch_row($result); return $value[0]; } function get_member_id($hash) { global $db; $result=mysql_query("SELECT id FROM ibf_members WHERE `member_login_key` = '$hash'") or die("!E:".mysql_error()); $value = mysql_fetch_row($result); return $value[0]; } // сравниваем нашу кашу и кашу из базы $result=mysql_query("SELECT * FROM ibf_members_converge WHERE `converge_pass_hash` = '$phash'") or die("!E:".mysql_error()); $value = mysql_fetch_row($result); $phashdb=$value[3]; if ($phash==$phashdb) { $pass_hash=get_pass_hash($value[0]); $id=get_member_id($pass_hash); echo "<script>window.location.href=\"ib.php?login=ok&ph=$pass_hash&mid=$id\"</script>"; } } ?> вот... если аякс ненужен то все если нужен то посмотрите "аякс в действии" один из первых уроков там есть этот реквест, приводить не буду. а можно еще с помощью ob_start() сделать вывод в буфер и потом выводить уже... но непробывал т.к. там куки надо передавать... вобщем вот. у меня работало... Кстати если Вы хотите с сайта узнать имя авторизированного пользователя то целесообразно echo "<b>$value[1]</b> <a href=\"?logout=ok\">выход</a>"; заменить на echo "<input value="\$value[1]"\ type=\"hidden\" id=\"ipb_u_n\"><b>$value[1]</b> <a href=\"?logout=ok\">выход</a>";а потом из этого поля читать document.getElementById('ipb_u_n')... вот ... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 31 Августа 2007 Жалоба Поделиться Опубликовано 31 Августа 2007 Передавать куки - это не проблема хотя и могла ввести вас в ступор. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
SShady Опубликовано 31 Августа 2007 Автор Жалоба Поделиться Опубликовано 31 Августа 2007 да действительно это не проблема, просто я говорю о том что не делал так поэтому незнаю насколько правильно будет советовать делать это через буферизацию вывода. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mylipetsk Опубликовано 15 Июля 2010 Жалоба Поделиться Опубликовано 15 Июля 2010 Проблема заключается в следующем. Как произошел глюк я не знаю. Где-то, что-то покрутил не то. Одно делал, другое сломал. В общем захожу на главную страницу, авторизируюсь, ввожу логин и пароль, жмакаю ОКей, и я попадаю на главную страницу как гость, если я захожу в любой из разделов форума, то в правом верхнем углу я вижу свою аватарку и показано будто авторизирован, как только я захожу на главную, я как гость. Главная страничка не меняется, новые темы или сообщения не обновляются, главная страничка замерла! Что делать, где, что и как крутить? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.