Je travaille sur mon CMS et je veux qu'il connaisse les activités des utilisateurs et d'autres administrateurs. Par exemple: lorsque de nouveaux registres d'utilisateur ou d'administrateur constituent une nouvelle nouvelle activité -> Update Dernière activité. P>
Je veux savoir quelle est la meilleure façon la meilleure et la plus simple. P>
5 Réponses :
Vous pouvez ensuite écrire un outil de reporting qui donne à votre accès à vos admins à ces activités connectées, vous pouvez filtrer par des types d'utilisateurs, de temps et d'activité. P>
Dans mon journal-cadre, je marque spécialement des activités qui pourraient être considérées comme des actions malveillantes et qui leur attribuent des valeurs de menace numériques différentes. Si la somme d'une valeur de thread d'un utilisateur atteint un certain seuil, je vous déconnectez l'utilisateur. P>
Idéalement, si vous écrivez une application, vous écrivez votre code d'infrastructure comme la journalisation au tout début, puis utilisez-la dans tout le code logique de votre entreprise ultérieurement. P>
Au fil du temps, vous pouvez collecter beaucoup d'enregistrements dans cette table. En fonction de vos besoins, vous pouvez faire différentes choses. P>
Supprimez toutes les entrées de plus de x jours (peut-être un an) p> li>
Supprimez toutes les entrées de certains types plus âgés de plus de x jours, mais gardez des entrées d'autres types plus longtemps ou pour toujours. P> Li>
Déplacez les entrées de plus qu'un certain seuil dans une table journal d'archive. Cela garde votre table principale petite mais vous permet d'accéder à des données de journal plus anciennes si vous devez vraiment le faire. J'ai une case à cocher
Utiliser archive code> sur ma page de journaux de révision. p> li>
ul>
Cela ne remplacerait-il pas avec le temps? Supposons que vous ayez un site Web hébergeant 300 000 membres et vous connectez toutes leurs actions? Comment géreriez-vous des informations aussi vastes?
au lieu de le faire vous-même, à partir de zéro, vérifiez comment certains systèmes existants le font et si leur licence le permet, utilisez leur conception et leur code (assurez-vous de documenter le code que vous avez utilisé et ajoutez Un avis de droit d'auteur à votre CMS quelque part quelque part). P>
Je ne suis pas sûr de PHP CMS qui faisait cela, mais je sais Le fichier contenant la journalisation est dans le module code> admin code> dans modèles.py . p> Quelques aspects clés: p> Le modèle de données pour la table de journalisation: p> et le logicitrymanager, qui enregistre les entrées de journal réelles: P> 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()
Cela ne remplacerait-il pas avec le temps? Supposons que vous ayez un site Web hébergeant 300 000 membres et vous connectez toutes leurs actions? Comment gérez-vous des informations aussi vastes?
J'utilise deux tables pour des activités, une pièce d'identité à chaque activité, et une autre qui enregistre simplement l'ID utilisateur, l'ID d'activité et un horodatage. Je fais cela parce qu'un int prend moins d'espace qu'une ficelle, alors pourquoi loger les mêmes chaînes de plus et plus? Le second n'est pas vraiment nécessaire, vous conserverez simplement les codes d'action dans un fichier texte pour votre propre référence, mais la DB semble simplement être une place plus facile à retenir. P>
Dans le passé, j'ai utilisé une fonction pour gérer les actions de journalisation réelles, mais la prochaine fois que je le fais, je vais utiliser le modèle d'observateur. Il semble être beaucoup plus flexible et j'ai déjà dû modifier les appels de la fonction de journalisation du code plus ancien que je n'ai rien à enregistrer. Je préfère beaucoup à réutiliser le code sans édition requise. P>
Son très simple à faire avec Pourquoi et ce que nous voulons enregistrer?
--- Comme nous le savons uniquement pour enregistrer une transaction avec la base de données - je ne sais pas tous les clics et les chèques - mais oui c'est possible avec cette solution .... P>
blockQuote> Voici la solution étape par étape: - p> ou toute autre chose que vous souhaitez enregistrer.
2. Créez une fonction de jQuery ou une fonction PHP - qui sera automatiquement déclenchée avec chaque page.
3. Cette fonction collectera toute la session de cette page, l'utilisateur connecté des informations détaillées et quelles données ont été transmises à cette page.
En dehors de cela - vous pouvez également enregistrer - à partir de quelle page cette nouvelle page s'appelle - sa meilleure façon de mettre en œuvre des fonctionnalités d'enregistrement de loggs, même dans les anciens logiciels suivants :) p> si vous voulez tout Le code que j'ai mentionné ci-dessus à utiliser - cherchez-le sur le net Le mécanisme que j'ai défini juste vous avez besoin de code de fonction - Code de fonction d'exécution automatique - SIMPLE P> P>
expliquer: p>
2. Créer une classe
de
P> <?php
session_start();
include("include/configurationadmin.php");
//include_once('../include/classes/config.inc.php');
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
$sql = mysqli_query($conn,"select * from ".$sufix."admin where username='".$username."'") ;
// HERE HOW TO LOG ACTION
$log = new log("Logging in attempt from $username" , $username ,'Login Attempt' );
$log->createAction();
//SIMPLE AND COOL RIGHT?
if(mysqli_num_rows($sql) > 0)
{
$rows = mysqli_fetch_assoc($sql);
if(md5($password) == $rows['password']) {
$_SESSION['id'] = $rows['id'];
$_SESSION['username'] = $rows['username'];
$_SESSION['usertype'] = $rows['type'];
mysqli_query($conn,"update ".$sufix."admin set lastlogin='".date('Y-m-d')."' where id = '".$rows['id']."' and username='".$rows['username']."'") ;
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie('rrdssrdda', $rows['id'], time()+120, '/', $domain, false);
header("Location: http://localhost/test/admin-new/dashboard");
exit();
} else {
$_SESSION['message']="<div class='alert alert-danger' role='alert'>Invalid userid/password!</div>";
header("Location: http://localhost/test/admin-new/");
exit();
}
} else {
$_SESSION['message']="<div class='alert alert-danger' role='alert'>Invalid userid/password!</div>";
header("Location: http://localhost/test/admin-new/");
exit();
} ?>
3.Log une action!
de
Exemple: action du journal pour les tentatives de connexion
Créer un fichier php logincheck.php li>
ul>
Voulez-vous seulement mettre à jour un champ Last_activity dans la base de données quand i> une action s'est produite ou souhaitez-vous réellement vous connecter ce que i> cette action était?