Ne kullanıcı Bağlı kalmak olabilir oturumları ile başa çıkmak için en iyi yoldur, ama bir oturum anahtarı çünkü başka güncelleme, güncelleştirilmesi gerekiyor?

4 Cevap php

Kullanıcıların teknik sürece onlar tarayıcıyı kapatmak asla (ve bu nedenle yeni bir oturum anahtarı asla) gibi, sonsuza Bağlı kalmak olabilecek bir site çalışıyorum. İşte oluyor görebiliyordu ne: Bir kullanıcı A bilgisayarı üzerinde bir tarayıcı açık bırakır sonra B bilgisayarı, giriş kullanmak ve oturumda depolanan kendi adını değiştirin. Bunlar B çıkış, ama yine kaydedilir ve hala eski adı oturumda depolanır oldu. Bu nedenle, kendi adını el ile kapatmayı veya onların tarayıcınızı kapatıp tekrar açın ve beni hatırlıyorum fonksiyonu sayesinde oturum sonraki zaman kadar güncellenir olmayacak.

Adı basit bir örnek, ama benim durumumda kendi hesabının abonelik düzeyi oturumda saklanır ve değiştirilebilir.

Bunu nasıl başa çıkabiliriz?

Ben bir kaç fikir:

  1. 10 dakika veya daha fazla bir süre sonra, oturum verileri almak en yeniden. Işlevi doğru 10 dakikalık bir noktada tetiklenir alacak veya kullanıcı yaprakları ve geri gelir ve sonra işlevselliğini tetikler eğer 2 saat sonra olabilir gibi kullanıcı son derece aktif ise tam 10 dakika olabilir.

  2. Oturumda mümkün olduğunca az bilgi saklamak ve her sayfa çağrı üzerine DB kalanını yükleyin. (Ben gerçekten bu fikri sevmedim.)

  3. Veritabanı oturumları kullanın ve tüm bilgisayarlarda aynı oturumu kullanın. Bunu beğendim, ama ben arama kriterleri gibi bir şey oturumda saklanır zaman kafa karıştırıcı oluyor - görebiliyordu aynı kriterler tarayıcılar / comptuers hem de boy gösterecek.

  4. Bilgi için, hatta kullanıcı adı veya kullanıcı adı / e-posta adresi olarak, oturumda saklayın, ama gerektiğinde ağır sitesinde kendi yeteneklerini etkileyecek diğer bilgiler için, girişimi için (oturum ve yük saklamayın sadece) bir kez örneği başına yapmak.

Başka daha iyi yöntemleri var mı?

-- Another option: 5. Use database session and when an uptarih is made load the user's other sessions (just unserialize), change the relevant information and save them back to the database.

4 Cevap

Ben 1 numara veya 4 numara ile ya gitmek istiyorum. Eğer bilgilerin son güncelleme zamanı saklamak, hatta tarih güncelleştirilmiş olup olmadığı her istek üzerine sorabilirsiniz.

Eğer anahat gibi senaryolara arıyorsanız, oturumda değiştirmek olasılıkla bilgi saklamayın. Tıpkı her sayfa yükleme kullanıcı verilerinin sizin sevmediğim üzerine olsun - bu kadar iyi bir fikir.

Ben nasılsa performans konuları hakkında endişeleriniz çünkü veritabanından veri yüklemek istemiyorum tahmin ediyorum. Şansını nedeniyle herhangi bir performans sorunları görmezsiniz - Eğer diğer çözümlerden birini deneyin önce, daha sonra kullanıcılar sizin sayıda karşı kontrol, aslında veritabanından kullanıcıların veri yüklemek için ne kadar sürer test etmek isteyebilirsiniz Her sayfada kullanıcı profillerini yükleniyor.

Selamlar

Onun oturumda sadece mağaza kimliği ve oturuma özel malzeme (arama kriterleri) ve (birden çok sunucu kullanıyorsanız memcached) APC / xcache içine kalanını koydu: Bu seçeneği 6 ile gitmek istiyorum.

Bu şekilde sadece (önbellek sona eriyor ve sonrası) ilk defa veritabanına gitmek ve hala kullanıcıların oturumları arasında herhangi bir veri paylaşabilirsiniz olacak.

Normally you should do 2), but you don't like it. maybe you can use sessions stored in db. when a user change his name, put into all sessions from that user the information "refresh userdata". on the next request the userdata is reloaded again into the session and is cached there. this can be done be reusing your loaduserdata function which called at login.

php session_set_save_handler() - da yorumlarını okumak

php session_decode() - oturumdan adını okumak için sessiondata ilave olarak saklamak için. güncellenmesi için kullanıcıların oturumları bulmak için kolayca için yararlı.

[edit] don't forget: when you are updating all the sessions while the page is generated (between session_start and session_write_close) you changes maybe lost.