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

Куки (интеграция)


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

Вот возник вопрос. Суть в следующем: пишу свою цмс для личных нужд. Хотел бы чтобы у меня была регистрация, но без собственых полей. Как и в каком формате писать в базу я уже знаю, как генерится пароль тоже. Но суть не в этом. Т.к. форум размещен forum.[mysite].ru я немогу нормально писать и читать куки для того чтобы осуществить автозаход, когда человек заходит на мой сайт. Т.е. чтобы заходя в форум он бы был уже авторизован набрав до этого имя и пароль на сайте. Описал проблемку конечно коряво но как смог. Подскажите плиз вариантик.
Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...

При авторизации на форуме (IPB 2.2), в куки создается такой ключ:

ipb_stronghold

 

Со значением, примерно таким:

68afa57d0677ea09426d214968f7e10b

 

Поэтому при авторизации на сайте (делаю связку своего сайта с форумом), на форуме не авторизуется.

IPB проверяет это ключ.

 

Но как он создается я незнаю.

В базе (на всякий случай) все проверил такого значения нет.

 

Может кто знает?

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

Это спец кука для увеличения защиты. Не разбирал подробно код, но скорее всего поможет отключение "Безопасных куков" в настройках безопасности форума, тем более что с ним г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 );

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

а может кто-нить подскажет как и где хранятся пароли в ИБ? просто хочу сделать авторизацию единую на всем сайте через форум, плюс отдельную страницу на сайте с регистрацией нового пользователя, но так чтобы без захода на сам форум, т.е просто скрипт будет писать все нужные данные в базу форума и все.
Ссылка на комментарий
Поделиться на других сайтах

Вот мой код авторизации на сайте.

 

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

 

Незнаю даже что делать ... :D

 

Кстати кто нить знает что за "coppa" cоздается в куки. Оно всегда равно 0.

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

Незнаю даже что делать ...

поставь домен куков для форума и сайта

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

Всмысле единный домен...

Тоесть допустим setcookie('member_id',$dcook[id],time() + 3600*9999, "http://site.ru");

А как для форума поставить?

Извиниюсь, но не понял идеи..

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

В админке есть настройки куков.

Там можно выставить единый домен для куков.

 

В твоей цмс когда делаешь авторизацию также нужно читать и сохранять куки, применяя параметр "домен куков"

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

Все равно не работает. Сегодня залил на сервак и проверил.

 

В админцентре форума прописал:

 

Домен куки: .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

Может что с ним?

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

ну тогда трассируй форум, class_session и поймёшь где он вылетает.
Ссылка на комментарий
Поделиться на других сайтах

Сделал авторизацию... Сейчас покажу =)

 

это файл 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')... вот ...

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

Передавать куки - это не проблема :D хотя и могла ввести вас в ступор.
Ссылка на комментарий
Поделиться на других сайтах

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

  • 2 года спустя...

Проблема заключается в следующем.

Как произошел глюк я не знаю. Где-то, что-то покрутил не то. Одно делал, другое сломал. В общем захожу на главную страницу, авторизируюсь, ввожу логин и пароль, жмакаю ОКей, и я попадаю на главную страницу как гость, если я захожу в любой из разделов форума, то в правом верхнем углу я вижу свою аватарку и показано будто авторизирован, как только я захожу на главную, я как гость. Главная страничка не меняется, новые темы или сообщения не обновляются, главная страничка замерла! Что делать, где, что и как крутить?

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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