xorg1990
New member
Hi, ich steh für eine denkbar einfachen Aufgabe die aber nicht funktioniert
Folgendes: jeder User kann sich auf meiner Website Registrieren und mehrere Unterseiten anlegen. Eben für diese Unterseiten brauch ich einen Zähler mit Heute,Gestern,Total,Rekord.
Der Zähler ist Datenbank basirend und soll eine Ip Sperre beinhalten.
Die IP Sperre über eine Session zu lösen funktioniert nicht, denn die session wird schon von der Hauptseite gesetzt klickt man dann auf die Unterseiten wird nix mehr gezählt. Wer dafür eine Lösung hat bitte melden. ExpressJs session wird genutzt.
Meine Lösung war und daran halte ich auf fest, eine zusätzlich spalte anlegen mit der Remote IP und der Aktuellen Zeit. Das alles als JSON.
Das Objekt sieht dann so aus {
"123.xxx.xxx" : 23156231566,
"456.655.xxx": 12345678912,
//usw
}
Jetzt muss eine Schleife her die sucht ob die ip schon vorhanden ist und ob die Zeit abgelaufen ist ,
dann erhöhe um eins. Damit das Objekt nicht größer wird muss auch mal eine ip gelöscht werden.
Die Funktion schaut so aus:
Ich habe mir eine Hilfsvariable "gefunden" erstellt damit funktionier die Sperre.
Das Problem ist das löschen alter IP's entweder wird gar nix gelöst oder die falsche ip. Eigentlich wird noch ein query benötig, weiß aber nicht wie weil da bekomme ich Problem mit connection.end().
Von Wartbar kann auch keine rede sein, dass muss auch einfacher gehen kann mir da wer helfen.
VG xorg1990
Folgendes: jeder User kann sich auf meiner Website Registrieren und mehrere Unterseiten anlegen. Eben für diese Unterseiten brauch ich einen Zähler mit Heute,Gestern,Total,Rekord.
Der Zähler ist Datenbank basirend und soll eine Ip Sperre beinhalten.
Die IP Sperre über eine Session zu lösen funktioniert nicht, denn die session wird schon von der Hauptseite gesetzt klickt man dann auf die Unterseiten wird nix mehr gezählt. Wer dafür eine Lösung hat bitte melden. ExpressJs session wird genutzt.
Meine Lösung war und daran halte ich auf fest, eine zusätzlich spalte anlegen mit der Remote IP und der Aktuellen Zeit. Das alles als JSON.
Das Objekt sieht dann so aus {
"123.xxx.xxx" : 23156231566,
"456.655.xxx": 12345678912,
//usw
}
Jetzt muss eine Schleife her die sucht ob die ip schon vorhanden ist und ob die Zeit abgelaufen ist ,
dann erhöhe um eins. Damit das Objekt nicht größer wird muss auch mal eine ip gelöscht werden.
Die Funktion schaut so aus:
Code:
function count(call, GrabberName, ip, cb) {
handleDisconnect(function(connection) {
connection.query("SELECT GrabberID FROM Grabbers WHERE GrabberName = ? ", [GrabberName], function(err, rows) {
if (err) {
throw err.message;
} else {
connection.query("SELECT * FROM Counts WHERE GrabberID =" + rows[0].GrabberID, function(err, rows) {
if (err) {
throw err.message;
} else {
var sperre = 90000 //ip sperre in ms ändern auf 24h
var gefunden = false;
var insertObj = {};
var ips = JSON.parse(rows[0].ips);
var Heute = parseInt(rows[0].Heute);
var Gestern = parseInt(rows[0].Gestern);
var Rekord = parseInt(rows[0].Rekord);
var Total = parseInt(rows[0].Total);
if (Total === 0) {//erste zählung
ips[ip] = Date.now();
Heute += 1;
Total += 1;
insertObj.Heute = Heute;
insertObj.Total = Total;
insertObj.Gestern = Gestern;
insertObj.ips = JSON.stringify(ips);
//zählung eintragen
connection.query("UPDATE Counts SET ?", insertObj, function(err, reult) {
connection.end();
if (err) {
throw err;
}
});
return cb();
} else {
for (var v in ips) {
if (v === ip) {
gefunden = true;
if (Date.now() > ips[v] + sperre) {
gefunden = false;
delete ips[v];
}
}
} //for
if (gefunden === false) {
ips[ip] = Date.now();
Heute += 1;
Total += 1;
insertObj.Heute = Heute;
insertObj.Total = Total;
insertObj.Gestern = Gestern;
insertObj.ips = JSON.stringify(ips);
connection.query("UPDATE Counts SET ?", insertObj, function(err, reult) {
connection.end();
if (err) {
throw err;
} else {
return cb();
}
});
}
}
}
return cb();
});
}
});
}); //handleDissconnect
}
Das Problem ist das löschen alter IP's entweder wird gar nix gelöst oder die falsche ip. Eigentlich wird noch ein query benötig, weiß aber nicht wie weil da bekomme ich Problem mit connection.end().
Von Wartbar kann auch keine rede sein, dass muss auch einfacher gehen kann mir da wer helfen.
VG xorg1990
Zuletzt bearbeitet: