Ajax, PHP, ve oturumlar konu

3 Cevap php

I have a PHP application that uses Zend Framework, jQuery's ajax, and Zend_Session. This application has been around for about 7 months and working the way it should. When the application initializes after the user logs in, about 10 ajax requests are fired off to load up relevant data to a dashboard type page. After those have requests have finished, ajax requests are mainly user-initiated from that point on. When the application was working properly, we didn't have a truly load balanced environment, we had 3 app servers that handles requests, but each one stored PHP session data locally. Recently we changed that so that each app server is connected to a central NFS share where PHP session data is stored. That is when the application broke.

Şimdi ne olur sayfa ile başlangıç ​​durumuna, ben ajax istekleri bekliyor görmek, ancak bunların yarısı zaman aşımı olabilir. Ben (yaklaşık 3-10 dakika) yeterince uzun beklerseniz, o zaman tüm kullanıcı başlatılan tıklama hızlı cevap. Biz sorun oturum işleme bizim değişiklik nedeniyle olduğunu doğruluyorum.

Herkes nasıl giderileceği üzerine gidiyor olabilir ne bir açıklama, ve / veya bir çözüm var mı?

Ben büyük ölçüde verebilirim herhangi bir yardım için teşekkür ederiz. Bu bir yere saçımı çekerek oldum.

3 Cevap

Benim için hızlı ve kolay bir çözüm, DB mağaza oturumlara değil mi? :) http://framework.zend.com/manual/en/zend.session.savehandler.dbtable.html

Bu yaygın bir sorundur. Büyük olasılıkla bir oturum kilitleme sorun haline çalıştırmak. PHP kullanan işleyicisi, dosya işleyicisi (ve Zend_Session varsayılan olarak kullandığı bir) kaydetme varsayılan oturum, oturum dosyaları kilitlemek için flock () sistem çağrısını kullanır.

Nasıl bireysel HTTP istekleri göndermek için hangi sunucu tercih ediyor? Sadece rastgele ve herhangi bir isteği sunucularından herhangi tarafından ele alınabilir, o zaman kolayca sunucu 1, ilk isteği kolları NFS paylaşımındaki oturum dosyası oluşturur ve alır ve bir kilit tutan bir senaryo düşünebiliriz bu dosya.

Sonraki AJAX isteği bu sunucuda PHP süreç müşterinin çerezden oturum kimliği okur ve NFS paylaşımındaki oturum dosya üzerinde bir kilit elde etmeye çalışır, farklı bir sunucuya geliyor. İlk sunucu hala dosya üzerinde kilit var olduğundan, kilitli ve bekliyor.

İşte ne neden olabilir. Eğer denge PHP yüklemeye çalışırken başladığınızda oldukça yaygındır.

Bazı yük dengeleyici dengeleyici tel üzerinden oturum kimliği bakmak ve aynı fiziksel sunucu belirli bir oturum için tüm isteklerini işleme sağlamak için yeterince akıllı nerede 'yapışkan oturumları' sağlayan bir mod var. Bu yük daha az verimli dengeleme yapabilir, ancak bu sorunun kurtulmak için buna değer.

Ya da, sorun başka bir şey ile ilgili olabilir. Bilmiyorum.

Bazı sorunlar var olabilir.

  • Bayat kopyaları önlemek için denemek için noac seçeneği Mount NFS paylaşım (What is close-to-open cache consistency?).
  • NFS yavaş
  • Dosya (session_write_close() denir?) Veya kilitli dosya yazılır ama sadece sunucunun yerel bellekte
  • Orada framesets (php oturum belgelerini kontrol) kullanırsanız bilinen sorunlar nelerdir
  • Eğer etki alanı değiştirmek durumunda da sorunlar olabilir (a.domain.com, b.domain.com)