Alt alanları ve konakları arasında Çerezler

5 Cevap php

Ben geliştirme ortamları ve dilleri bir arada kullanarak yazıyorum uygulamasında, ben ayrı bir konağa, iki farklı alt etki alanları her bir çerez erişim ihtiyacı var.

Çerez www.mydomain.com şu PHP kodu kullanarak, ve ben ayrı bir ana bilgisayarda distant.mydomain.com onu erişmek için çalışılıyor ayarlanır ediliyor.

setcookie('token', base64_encode(serialize($token)), time()+10800, '/', '.mydomain.com');

I distant.mydomain.com aşağıdaki kodu kullanarak tanımlama erişmeye çalışıyorum:

if (isset($_COOKIE['token'])) { /* do stuff */ }

The problem: distant.mydomain.com çerezi bulgu değildir. The if deyimi sadece belirtilen döndürür false, çerez var olsa bile.

(Benim Firefox çerezleri kontrol ederek) ayarlanır çerez mydomain.com için olduğunu doğruladıktan. Ben bu çalışma olmaz herhangi bir nedenle düşünemiyorum.

Aynı setcookie kodu kullanarak, ben www.mydomain.com ana münhasıran çalışan eski bir uygulama var ve bu uygulama etki alanları arasında çerez erişebilir. Bu bana sorun ayrı bilgisayarlar ile ilgisi var olduğunu düşündürür.

Just in case any of the following information is pertinent:
- www.mydomain.com is IIS 6.0
- distant.mydomain.com is Apache 2.2.9
- Both servers use PHP 5.2.x
- Both servers are operating on Windows Server 2003

Ben daha iyi sorunu tanımlamak amacıyla sağlayabilir herhangi bir başka bilgi varsa, lütfen bana bildirin!

5 Cevap

Bu soruyu okuyan herkes yararına özgün yazı bulunan kod ve bilgileri tam ve doğru çalışma gayet iyi.

Diğer teknolojisini tanıtmak zaman sorunudur. Örneğin, I have since learned that sending PHP code through a Python module, one that allows Django to serve PHP files/content, changes a great deal about what is accessible to the script and what is not.

Bu sonuçta orada ne olduğunu bulmak için günlüğüne $_COOKIE göndermeyi önerdi Marc Novakowski tavsiyesi, aşağıdaki keşfedildi.

Ben de kontrol $_SERVER ve $_GET. Ben kullanmak için çalışıyorum kurulum düşündüğümden kadar basit olmadığını beni ihbar $_GET içinde boşluk oldu. Bu yanlış anlayış orijinal yazılan Django hakkında bilgi dahil değil neden o oldu.

Özür dilemek bu soruya cevap herkese and teşekkürler!

Tanımlama etki ayarlanmış

'.aaa.sub.domain.com'

etki set aynı adlı kurabiye ile çarpışacak

'.sub.domain.com'

ve '.some.stupidly.obscure.multi.sub.domain.com'

Bunun anlamı (ve bu aracılığıyla zorla biraz zaman aldı) Eğer 'bu durumda, ana / baz etki kez ayarlandıktan (ve sadece bir kez) gerekir birden çok alanda aynı adlı cookie kullanmak için gidiyoruz eğer. domain.com '; Aksi takdirde, elde edilen çerez indeterminantly olacak ve rastgele geldi döndü, bazen. a.sub.domain.com set cookie 'jasper', bazen çerez 'jasper' ayarlanır. sub.domain.com, bazen çerez ' jasper 'in set. bcddomain.com, bazen çerez' set 'jasper. sub.domain.com' ve bazen çerez 'jasper' set '. domain.com'

Alt etki birinin bir çizgi kullanmak mı? IE subdomain en URI RFC takip dont gelen çerezleri kabul sorunları var.

Bu 'uzak' bir yer tutucu ve gerçek Alt alan adı ve IE kullanmak elbette asumming edilir. Daha tarayıcılar çok sıra tarafından gerçekleştirilebilir rağmen, Fireworks olsa değil.

I Charles Proxy kurmayı deneyin ve a) (çerez ayarlamak için) ve b) başlıkları ikinci sunucuya Firefox gönderilen edildiği başlamak Firefox gönderilen hangi başlıkları görmek istiyorum. Sorun (tarayıcı veya sunucu) olduğu bu şekilde en azından daraltmak.

setCookie-işlevi hakkında php.net Gönderen:

Çerez mevcut olacaktır hangi sunucuda yolu. '/' Belirtilirse, çerez tüm etki alanı içinde mevcut olacaktır. '/ Foo /' belirtilirse, çerez sadece / foo / dizini içinde kullanılabilir olacak ve böyle bir etki / foo / bar / gibi tüm alt-dizinleri. Varsayılan değer çerez set in ediliyor geçerli dizini

Cookie mevcut olan etki. Example.com tüm alt etki alanları üzerinde çerez kullanılabilir yapmak için o zaman bunu bırakacağım '. Example.com'. . Gerekli ama daha tarayıcılar ile uyumlu hale getirir değil. Www.example.com ayarlamadan www alt etki alanı çerez sadece sağlayacaktır. Ayrıntılar için »spec kuyruk eşleşen bakın.

Temelde:.. Sizin 4. ve 5. parametre kontrol edilmesi gerekir: Peki, sizin yolu iyi gibi görünüyor, ancak etki değiştirilmesi gerekiyor:

Bugün A etki daha tüm başkalarına tanımlama bilgilerini engellemek, ama bunu alan A ve B Bu biraz zor hem de awailable olmak istiyorum, ancak çözülebilir. Üzerine ilham alın 15seconds ;-)