PHP w / Cookie Ayar Sorunu

1 Cevap php

Ben iki "etki" karşısında yerel çalışıyorum. Benim makinede enterprise.local ve application.local sanal konaklar var ve ben bazı sorun çerez olsa, düzgün ayarlamak alıyorum yaşıyorum "local.", "Yerel" veya bir etki çerez ayarlamanız gerekir. Application.local, ben bu var:

setcookie( 'iPlanetDirectoryPro', trim( $token_id ), '0', '/', '.local' );
header( 'Location: /adcom-sso' );

Ben de denedim:

header( 'Set-Cookie: iPlanetDirectoryPro=' . trim( $token_id ) . '; path=/' );
header( 'Location: /adcom-sso' );

Kullanımı setcookie(), hiçbir çerez hiç ayarlanır. Set-Cookie başlığını kullanarak, çerez is set. Ben hem yönlendirmeyi kaldırmış ve sonuç asla değişmez. Bu, ancak setcookie() için, Set-Cookie için çalışır. Yani ben gerçekten kullanmak çözüm bir tercih yok çünkü iyi olacak, ama Set-Cookie çözelti içinde, en kısa sürede bir etki alanı tüm ayırır eklemek gibi olacaktır:

header( 'Set-Cookie: iPlanetDirectoryPro=' . trim( $token_id ) . '; path=/; domain=local' );

En kısa sürede etki değeri eklemek gibi, ben bir başlık hatası alıyorum:

Header may not contain more than a single header, new line detected.

Ben "yerel" ve ". Yerel" olarak etki alanı değeri denedim. Davranışı değişmez.

Ben nadiren açıkça tanımlama erişmek zorunda, bu yüzden ben sadece belirgin bir şey eksik umuyoruz, ama ben kesinlikle öyle görmüyorum. Herhangi bir fikir çok takdir.

UPDATE: Sanırım bu biraz daha daralmış düşünüyorum. Bu iki yönde çalışacak gibi görünüyor as long as I don't include a domain value. Cookie için belirli bir etki alanı olarak "yerel.", "Yerel" veya istimal ile bir sorun olabilir mi?

1 Cevap

EDIT: I've now had a look at RFC2109, 4.3.2 Rejecting Cookies:

  • The value for the Domain attribute contains no embedded dots or does not start with a dot.

    ...

  • A Set-Cookie with Domain=.com or Domain=.com., will always be rejected, because there is no embedded dot.

Bu tarayıcı reddetme gibi görünüyor '. Yerel' güvenlik kaygıları nedeniyle. Bir etki alanı için bir çerez ayarlamak için, en az iki nokta olmalıdır (örneğin '. Cookiedomain.local').

Başka bir alt alan (örneğin another.local) için bir alt etki alanı (örneğin one.local) bir çerez ayarı mümkündür AFAIK değildir. Eğer bu sorun / ayarlar tüm çerezleri alır ve sorgu parametreleri gibi url dahil çerez verileriyle nereden geldiğini tekrar kullanıcıyı yönlendiren bir çerez alanına kullanıcı yönlendirme aşmak için ne yapabilirim. Microsoft yaptığı (ya da yoktu) kendi etki (msn.com, microsoft.com) için bu gibi.


Eğer bir argüman olarak dize header() ya da takip olmayan bir satır besleme karakteri içeriyorsa ("Başlık ... içeremez") sadece tetiklenir olsun hata boşluk ya da sekme (sonraki satırda başlık devam ediyorum).

Şimdi, setcookie() will actually urlencode() its value (setrawcookie() olmaz), bu yüzden bir satır besleme orada bir hataya neden olmaz.

trim() function, on the other hand, will strip whitespace only from the beginning and end of its argument and leave any other linefeed characters intact. So perhaps you could try something like preg_replace('/\s+/', '') yerine.

setcookie() yaklaşım sizin için çalışmıyor neden bana immidiately açık değildir. Aslında (setcookie() ile ayarlanır) çerezi görüyoruz ama url içinde kaçar beklemiyordum, ve sessizce yere kodunda reddettiği olabilir.

İlk header() (içinde linefeeds ile) çalışmak gibi görünüyor Ancak, neden olduğunu açıklamak değil; bu cookie değerlerine bazı onları linefeeds var ve bazı yoktur gibi görünüyor.

(Lider '.'). Yerel 'olarak etki alanını ayarlama çerez görmek subdomain istiyorsanız, arada, yapılacak en doğru şeydir.

setcookie() ile çerezleri ayarlaması hakkında bazı ek uyarılar PHP belgelerinde (özellikle kullanıcı yorum) tartışılmıştır.