Tam olarak anlayamadım aşamaları sanırım sabaha kadar çalıştığımdan. Mesajım bulunsun gün içinde tekrar bakarım.

Bir cookie'yi birçok sitede kullanmak pek sağlıklı değil. Şu şekilde yaparsan bir cookie'yi diğer sitelere yayabilirsin. Tekrar belirtiyorum küçük hataları olabilir oldukça yorgunum konu ilgimi çektiği için yazmadan kendimi alıkoyamadım.

Not : Kullanıcı çıkış yaptığında APIServer.com üzerinden çıkış yapar. APIServer.com veritabanındaki token etkisiz hale getirilir (silinir veya bir status kolonu eklenip durum kontrolü yapılabilir).


APISERVER.com -> API Server
DENEME1.com -> Deneme Server

Kullanıcı herhangi bir site üzerinden giriş yaptığında APIServer.com üzerinden bir session veya cookie oluşturur ve kullanıcıya atama yapar. (Ben cookie ile devam edeyim aşağıdaki kodlarda)

Deneme1.com içerisine bir atama yaparsın ;
<?

if ($_COOKIE["login_check"]) {
/*
Gelen login_check cookiesine göre kontrol işlemleri yapılır. 
Mesela cURL ile Apiserver.com/control.php 'ye bağlanırsın. Apiserver.com'dan gelen cevaba göre işlem yaparsın. Eğer gelen cevap başarısızsa;
$_COOKIE["login_check"] = '';
yaparsan güvenliği sağlamış olursun. 
Sayfa her yenilendiğinde kontrol işlemi gerçekleşmelidir. Aksi halde güvenlik zafiyeti oluşabilir. 
*/
} else 
{ echo '<script src="http://apiserver.com/callback.php"></script>'; }

?>
Apiserver.com tarafı ;
login.php

<?
function generateToken($username) {
$token = md5(rand(0,99999999999).md5(rand(0,99999999999));
/* Örnek token tablosu : id | token | username */
mysql_query("insert into tokens values(null,'".$token."','".$username."')");
return $token;
}

/* Kullanıcı doğru şekilde APIServer.com üzerinden giriş yaptığında ; */
$username = $_POST["username"];
$token = generateToken($username);
setcookie ("user_logged", $token, time() - 3600*24);
...

?>

callback.php

<? 
function getToken() {
/*
Kullanıcıya apiserver.com tarafından atanan cookie veya session'a göre 
*/
}
if ($_COOKIE["user_logged"]) {
$token = getToken();
if ($token) {
/*
Aşağıdaki javascript kodları Deneme1.com üzerinden çağrıldığından Deneme1.com üzerinde çalışacaktır. Böylece cookie atamasıda Deneme1.com üzerinden gerçekleşecektir.
*/
?>
function Set_Cookie( name, value, expires, path, domain, secure )
{
var today = new Date();
today.setTime( today.getTime() );
if ( expires )
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );
document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}

Set_Cookie( 'login_check', '<?=$token?>', '', '/', '', '' );
location.reload();
<?
}
?>
control.php

/* 
Bu kısımda APIServer.com ile Deneme1.com iletişim halinde olur. 
Kullanıcıya atanan cookie'nin doğru olup olmadığını kontrol eder ona göre geri dönüş sağlar.
*/
function checkToken($token) {
$query = mysql_query("select * from tokens where token='".$token."'");
return mysql_num_rows($query)
}

$token = $_POST["token"];
if (checkToken($token)) { 
echo 'logged';
} else { echo 'invalid_token'; } 
/* Artık sunucuya ne geri döndürmek istiyorsanız, user_id olur yada mysql_fetch_assoc APIServer.com daki kullanıcı bilgilerini alıp json_encode yaparak döndürebilirsin. */