Co się okazało, większość programistów aplikacji sieciowych spotkała się już z tym problemem.
Sesje i ciasteczka to produkt bardzo wrażliwy, nie może być ustawiany jak nam sie podoba lecz według pewnych reguł...
Wróćmy do problemu:
Mamy dwie domeny:
1. dottech.pl
2. php.pl
I każda z tych domen posiada kilka subdomen.
Problem polega na tym, że jak wystartuje sesję np w mojekwiatki.dottech.pl to chcę, aby była widoczna nawet z poziomu forum.php.pl
Rozwiązanie:
Do pliku .htaccess w głównym katalogu każdej subdomeny dodajemy linijkę:
php_value session.cookie_domain '.dottech.pl
Gdzie domena to nazwa domeny pod którą jest serwis.
OK teraz utrzymujemy sesję w obrębie naszej domeny, ale jeszcze nie jesteśmy widoczni z drugiej domeny.
Tak więc: w nagłówku strony dodajemy skrypt JavaScript (No dobra, ECMAScript):
<script type="text/javascript">Ten sam skrypt musi być w nagłówkach wszystkich serwisów i być wywoływany w momencie wywoływania sesji (np. logowania).
function setOutCookie(session_id,host){
var addr = host+'__setcookie.php?sid='+session_id;
sessionImg = new Image();
sessionImg.src = addr;
}
setOutCookie('<?=session_id();?>','http://dottech.pl/');
setOutCookie('<?=session_id();?>','http://php.pl/');
</script>
Ostatni krok to plik __setcookie.php, który powinien być w głównych katalogach domen.
Skrypt ten ustawia sesję i wygląda następująco:
<phpI to wszystko ;)
preg_match('#[^.]+\.[^.]+$#', $_SERVER['HTTP_HOST'], $matches);
setcookie('PHPSESSID', $_GET['sid'], 0, '/', '.'.$matches[0]);
?>
Od teraz możemy się cieszyć jedną sesją na wielu swoich domenach :)
Pozdrawiam,
Michał Woliński
1 komentarz:
Czy ktoś to sprawdził czy działa? Mam 2 witryny stara (comes.com.pl) i nową (dealer.comes.com.pl). I po zalogowaniu na tej pierwszej drugą powinno się przeglądać jako już zalogowany użytkownik. I mimo że sesja jest trzymana w tym samym miejscu (.comes.com.pl) robię to przez: ini_set("session.cookie_domain", ".comes.com.pl"); i jest ten sam session id. To wygląda to tak, jak by ten skrypt nie działał. Po zalogowaniu się na pierwszej witrynie i przejściu na drugą witrynę żadne dane nie są powielane z tej pierwszej witryny, przez co cały czas na tej drugiej witrynie jestem nie zalogowany. Czy ktoś może zna rozwiązanie tego problemu? A może ten skrypt jest nie działający. A może trzeba coś jeszcze w configu zmienić?
Pozdrawiam,
Prześlij komentarz