2016-03-25 9 views
0

benim PHP komut başındakaldır anonim oturum çerezleri php

session_start();

kullanıyorum. Son zamanlarda bazı önbellek yapmak için vernik kurdum, bu yüzden bir kullanıcı anonim (veya giriş yapmamışken) olduğunda PHPSESSID'in kaybolmasını istiyorum.

Kullanıcının oturum açmamış olması ve bu tür sayfaları önbelleğe alması durumunda PHP betiğimde (yanıt başlığında bulunan) özel bir üstbilgi oluşturmayı düşündüm. Ancak bunun Cookie'nin istek başlığında olması nedeniyle işe yaramayacağını düşünüyorum. Doğru anladığımda verniğin neden önbelleğe alınmadığıdır.

Bu senaryoyu nasıl çözebilirim? Anonim kullanıcılar için istek çerezini silmek ideal görünüyor.

+0

Size yardımcı olabileceğini tahmin ediyorum http://php.net/manual/en/function.session-destroy.php –

+0

@ JonathanParentLévesque Yorumunuz için teşekkürler. Ben session_destroy() denedim; anon kullanıcıları için ancak PHPSESSID çerezi hala sayfadaki istek başlığında devam ediyor. Kaybettiğim bir şey mi var? – hobbitty

cevap

0

Burada yer alan birkaç faktör var, bu yüzden lütfen tamlıktan yana kısırlıktan yoksun olduğumu affedin. Her şeyden önce, session_destroy() sadece sunucu tarafı oturum verilerini siler, PHPSESSID çerezini (veya bir oturum çerezini ayarlamak için varolan bir yanıt başlığı isteği) değil. İstemcide zaten bir çerez varsa, bir setcookie() komutunun, PHPSESSID çerezini, geçmişte bir son kullanma tarihine sahip olan bir başkasının üzerine yazmak için çağrılması gerekir. Bu, tarayıcının http istek süreçlerinden sonra çerezi silmesine neden olur. Bununla birlikte, PHSESSID çerezinin mevcut istekte hala varlığını sürdürmesine yardımcı olmayacak, ancak Vernik'i durdurmaya başlayacaktır. Her session_start() komutunu yok etmek için bir koşulla kovalayabilir ve set-cookie başlığını istemciye gitmeden önce yanıttan çıkarırsanız o zaman işe yarayabilir, ancak bu çok dengesiz bir yardımcıdır. Aynı zamanda PHP'nin oturum işlemesini geçersiz kılmak, böylece tüm session_start işlemi koşullu bir şekilde gerçekleşir, ancak bu aynı zamanda kaba bir yama (daha fazla bilgi için: http://php.net/manual/en/class.sessionhandler.php)

Varnish, belirli çerezleri (örneğin; Google Analytics çerezleri):https://www.varnish-cache.org/docs/3.0/tutorial/cookies.html Vurgu, Vernik'in bakış açısına göre doldurulmuş bir PHP oturumunu boş bir panele göre söyleyemez, bu yüzden giriş yapan kullanıcılar bile Vernik'ten önbelleğe alınmış sayfalar olarak sunulur. Varnish'in PHPSESSID çerezini görmezden gelmesini öneriyorum, ancak Varnish'in baypas etmediği doğru bir girişe ek bir çerez koyup, bu isteklerin arka plana geçmesini sağlayın.

+0

Bu mantıklı. Diğer bir fikrim, kullanıcı giriş yapmışsa url'nin sonuna bir şey eklemekti, böylece vernik bu istekleri iletirdi. Ama bu çok güzel bir çözüm değil, ben de birazcık daha fazla bakacağım. – hobbitty