PHP Oturumları değiştirin

4 Cevap php

Ben şimdi en az 2 yıl boyunca üzerinde çalışıyoruz bir sosyal ağ türü uygulaması var, ben bu app kodunu mükemmelleştirmek içine çaba koyduk bu nedenle de ölçek gerekir. Siteye bir kullanıcı oturum açtığında ben orada kullanıcı kimliği numarası, adı, Ürer durumu / rolü, fotoğraf URL, çevrimiçi durumu, son etkinliği zaman, ve oturum değişkenleri içine birkaç başka şeyler / önbelleğe zaman bir kullanıcı için önbellek veritabanı sonuçlar çok sık oturumları kullanın dizi. Şimdi ben şu anda bu siteyi, apache sunucusu için 1 sunucu ve mysql için ayrı sunucu işlemek için 2 ayrı sunucuları var. Şimdi veritabanı yükü azaltmak için bazı bölgelerde memcache kullanmaya başladım.

Şimdi benim oturumları diskte saklanan ve benim için ben mysql de storingsessions geçmek için olsaydı ben mysql önbelleğe oturum verilerini saklamak tür amacı yenilgi olacağını görünüyor, bazı insanlar oturumları veri depolamak için bir veritabanı kullanmak biliyorum. SO Burada ne eksik? Neden insanlar oturumları için bir veritabanını kullanmak için seçerim?

İşte benim fikir birden çok sunucu arasında oturumların saklamak ve erişim için easiar kılacak oturumları için bir veritabanı kullanarak vardır, bu bir veritabanı kullanmak için ana nedeni nedir?

Ayrıca ben bunun yerine bir oturumda bunları saklamak geçici değişkenleri saklamak için memcache kullanıyor olmalıdır?

4 Cevap

Veritabanında oturumları saklamak için tek bir iyi sebep olduğunu böylece yük-dengeleyebilirsiniz web sitenizi. Bu şekilde onlar tüm oturumları saklamak için aynı veritabanını kullanarak, çünkü sonraki sayfayı eller hangi sunucu farketmez.

Bir özel oturum işleyicisi yükleme için PHP's set_save_handler() bakabilirsiniz. O iyi bir veritabanı işleyicisi yapmak için satırları sayılmaz gerçi, veritabanı oturumu koyar bir kurmak için yaklaşık 30 satır alır. Yapmanız gereken :-):

ini_set('session.save_handler', 'user');
ini_set('session.auto_start', '0');

... session.auto_start php.ini olması gerekir (ve 0'a ayarlanır) rağmen.

Veritabanı erişimi biraz pahalı olacak, o hafifletmek için yapabileceğiniz bazı şeyler vardır. Bariz bir just oturumları için bir DB sunucusuna sahip olmaktır. Başka bir hile bu memcache ve DB hem de içine şeyler sokmak zorunda olduğunu, bu nedenle kontrol ettiğinde memcache kayıt eksik ise, sadece geri DB düşer. Bunu da birlikte fantezi olsun, ve bu yüzden bazı memcache ancak geri kalan veritabanında yaşayan oturumu kadar bölünmüş olabilir. Ben olsa, PHP'nin oturum API üstüne kendi erişim fonksiyonları koymak gerekir diye düşünüyorum.

PHP memcached oturumları depolamak için kullanılacak yeteneği vardır.

Bu sadece sizin için kazanan bilet olabilir.

this google search bir göz atın.

Zend Server paketinin bir parçası bir oturum servistir.

Bu amaç için memcache kullanırken dikkatli olun. Hafıza kova dolduğunda, bir FIFO moda şeyler atmadan başlar.

slideshare php-cli ile kendi oturum sunucu oluşturma hakkında bu buldu.

Aksi takdirde bunu doğrulamak için hiçbir yolu yoktur, çünkü bir veritabanında oturum verilerini depolamak için ana nedeni güvenlik. Siz veritabanındaki verileri ile oturum kimliği boyunca saklamak ve oturum tahrif olup olmadığını görmek için onları maç ama artık sunucunun (apache) varsayılan oturum mekanizması kullanamazsınız ediyorum.

Yerine oturumun memcache değişkenleri saklanması için .. Eğer veritabanı sorgu önbelleği kurdunuz? Bunun yerine ilk önce memcache ile daha uğraşmak çok kolay orada bir görünüm olurdu.