PHP ve MySQL ile kullanıcı eylemleri log nasıl?

3 Cevap php

I'm working on my CMS and I want it to log activities by users and other admins. For example: when new user registers or admin makes a new news post -> update last activity.

Ben en iyi ve en kolay yolu nedir bilmek istiyorum.

3 Cevap

  • Create a table in your database to log your user activity.
  • Define the various activity types that can happen in your App.
  • Create a common function that logs any activity to that table.
  • Call that function from anywhere you you perform log-worthy activities in your app.

Daha sonra adminler bu günlüğe faaliyetlerine erişim sağlayan bir raporlama aracı yazabilir, kullanıcı, zaman ve faaliyet türlerine göre filtreleme yapabilirsiniz.

Benim log-çerçevede, özellikle kötü niyetli eylemler olarak görülebilir faaliyetleri işaretlemek ve onlara farklı sayısal tehdit değerlerini atamak. Bir kullanıcının iplik değerinin toplamı belirli bir eşiğe ulaşırsa ben log-out kullanıcı.

Eğer bir uygulama yazarsanız İdeali, başında yapıp daha sonra tüm iş mantığı kodu kullanmak gibi altyapı kod yazmak.

Basic Answer

Bunun yerine sıfırdan, bu kendinizi yapmanın, bazı mevcut sistemler bunu nasıl kontrol ve lisans izin veriyorsa, (emin kullanmış oldum ne kodu belge yapmak ve yere CMS için bir telif hakkı bildirimi eklemek) kendi tasarım ve kod kullanabilirsiniz .

Possibly Helpful Example

PHP CMS Bunu hangi konuda emin değilim, ama Django's yönetici uygulaması biliyorum. Django Python uygulanan, ancak PHP üzerinde bu kod noktasına oldukça anlaşılır olmalıdır. Kod düz bir bağlantı olmasa bile, tasarım taşıdık olabilir.

Günlük içeren dosya models.py in admin modülünde.

Bazı temel yönleri:

Günlük tablosu için veri modeli:

class LogEntry(models.Model):
  action_time = models.DateTimeField(_('action time'), auto_now=True)
  user = models.ForeignKey(User)
  content_type = models.ForeignKey(ContentType, blank=True, null=True)
  object_id = models.TextField(_('object id'), blank=True, null=True)
  object_repr = models.CharField(_('object repr'), max_length=200)
  action_flag = models.PositiveSmallIntegerField(_('action flag'))
  change_message = models.TextField(_('change message'), blank=True)
  objects = LogEntryManager()

Asıl günlük girişlerini kaydeder ve LogEntryManager:

class LogEntryManager(models.Manager):
  def log_action(self, user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
    e = self.model(None, None, user_id, content_type_id, smart_unicode(object_id), object_repr[:200], action_flag, change_message)
    e.save()

Kızgın, iyi şanslar!

Ben faaliyetleri için iki tablo, her faaliyeti bir id verir birini ve sadece kullanıcı kimliği, faaliyet id, ve bir zaman damgası kaydeder başka birini kullanın. Int bir dize daha az yer kaplıyor, neden tekrar aynı dizeleri oturum çünkü ben bunu? İkincisi, sadece gibi kolayca kendi referans için bir metin dosyasına eylem kodlarını tutmak, gerçekten gerekli değil, ama db sadece hatırlamak için kolay bir yer gibi görünüyor.

Geçmişte ben gerçek günlük eylemleri işlemek için bir fonksiyon kullanılır, ama ben bunu bir dahaki sefere ben Observer desen kullanarak gidiyorum. Bu çok daha esnek gibi görünüyor, ve ben zaten böyle bir şey oturum gidiş değildi sahip eski kod adlı günlük işlev çağrıları dışarı düzenlemek zorunda kalmıştım. Ben hemen hiçbir düzenleme gerekli olan kodu yeniden tercih ederim.