Çapraz etki alanı PHP Oturumları

4 Cevap php

Ben bir kullanıcı "profilleri" çalıştırmak için yerinde bir CNAME kaydı işaret sağlayan bir site inşa ediyorum, bu KENDİ etki alanı adı benim sitede profil yüklemek için izin verir.

Bu oturumları ile ilgili konularda her türlü yükseltiyor. Ben virb bunu gördük. Ben bir iFrame merkezli oturumu herhangi bir bilgi görmüyorum ... ama sayfada mevcut bir iFrame var IS.

Ben, etki şeyler işe alabilirsiniz Ben sadece oturum verilerini kaybedebilirsiniz ... Herhangi bir fikir?

(İşte bir örnek - Virb Linkler - http://www.agentspider.com/)

4 Cevap

You can't set cookies cross domain by default. I believe, you can set up a P3P file(s) to enable it. http://p3ptoolbox.org/guide/section4.shtml#IVd I haven't done this myself, so I don't know how much of the browsers implement it or if it even works that way.

Sadece JavaScript kullanıyor gibi Virb görünüyor. Hiçbir oturum tanımlama ayarlanırsa virb sunucuya bir JSON-P istekte bir AJAX kütüphanesi vardır. JSON yanıt sadece kullanıcı ya da değil açtıysa sayfa bildirir ve kullanıcı durumunu yansıtmak için gereken sayfanın bölümlerini günceller (Firefox ilk yük size Firebug görebilirsiniz).

Peki oluyor sayfa virb.com bazı JS gömer olduğunu. Etki virb.com olduğu için virb.com ayarlanmış çerezleri sunucusuna gönderilir. Sunucu daha sonra harici bir siteye çerez sonucu ile yanıt verir.

JS olmadan düzgün çalışmaz virb, durumunda, ben iyi bir seçenek thats düşünüyorum. Ancak, HTTP yönlendirmeler ile aynı yapabilirdi.

HTTP Host ana etki alanı değilse (example.com):

if (!$_COOKIE['sessionid'] && $_SERVER['HTTP_HOST'] != 'example.com') {
// redirect to your main site
header('Location: http://example.com');
}

Ana sitede, çerez ayarlayın ve konumu session id geçen dış etki (domain.com) geri kullanıcıya göndermek.

header('Location: http://domain.com.com?sessid='.urlencode($_COOKIE['sessionid']));

Nihai bit sen şimdi gidiyorsun aynı oturuma sahip olduğu vardı sayfaya geri yönlendirmek.

setCookie(...); // sessid in $_GET['sessid']
header('Location: http://domain.com/');

Daha sonra ona geri yönlendirebilirsiniz böylece sen, gerçekte, ilk adımda size geri example.com şu anda konum sayfasını gönderebilirsiniz, unutmayın.

Sadece başlıkları (çıktı içeriğe gerekmez) ve çoğu durumda HTTP/1.1 kullanıyorsanız böylece aynı TCP soket üzerinde olacak çünkü ben oldukça verimli olduğunu düşünüyorum ve daha sonra JavaScript seçeneği desteklenecektir.

Edit: geri dış etki olsun çerez ayarlamak unutmayın.

Son adım isteğe bağlıdır ancak bir URL olmaktan sessid tutar. Hangi sonra HTTP başlıklarında tutarak bir güvenlik sorunu daha fazladır.

Tek yolu session id-s başka bir etki alanından gitmek url-s eklemek (veya iframe src url, oturum id ekleyin), ve daha sonra bu işlemek için oturum depolama arka uç kod değildir.

Tabii ki, bu yaklaşım beraberinde getiriyor tüm güvenlik sorunlarını dikkate almak gerekir.

Hiçbir şey daha basit olarak:

1) kaynağı ile domain1.com/client.html oluşturun:

<script type="text/javascript" src="domain2.com/server_set_cookie.php"></script> 2) create domain2.com/server_set_cookie.php with php source:

header("p3p: CP=ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV");

setcookie($_REQUEST['cookie_name'], 'cookie_name', time()+3600);

http://smartcoding.wordpress.com/2009/07/12/setcookie-cross-domain-cookie-write/

not sure I understand your problem. Is it something like another domain calling something like www.userprofiles.com/profile.php?userid=1 and displaying the results? In this case profile.php will generate a new session id whenever it gets called. You need to set different ids for every external domain using your site and change profile.php to something like:

if( isset($_REQUEST['sid']) ) session_id($_REQUEST['sid']);

session_start ();

and call the script like this www.userprofiles.com/profile.php?userid=1&sid=somesessionid1234