Ergebnis 1 bis 5 von 5

Thema: Sichere Messung der Besuchsdauer

  1. #1
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard Sichere Messung der Besuchsdauer

    Hallo an alle, ich bin nicht sicher, ob der Post hier im richtigen Subforum ist, falls nicht, bitte entschuldigt.

    Und zwar möchte ich gerne tracken, wie lange ein Benutzer auf einer Seite aktiv ist. Dabei habe ich die timeme.js gefunden und installiert. Ich habe das Script bei jedem Seitenaufruf eingebunden und möchte neben der Dauer der Aktivität auch die PageID sowie die UserID speichern. Mein Skript sieht dann so etwa aus:

    Code:
    <script src="files/js/timeme.js"></script>
    <script>
    	$(document).ready(function() {
    		<?= "var uid = '{{user::id}}';"; ?>
    		<?= "var uid = (uid == '') ? 0 : '{{user::id}}';" ?>
    		
    		if(uid != '') {
    			// Initialize library and start tracking time
    			TimeMe.initialize({
    				currentPageName: window.location.href, // current page
    				idleTimeoutInSeconds: 30, // seconds
    			});
    
    			var starts = Date.now();
    			
    			//  Send AJAX request
    			$(window).on("unload", function(e) {
    				$.ajax({
    					type: 'POST',
    					url: 'files/php/time.php',
    					data: {
    						pageid: {{page::id}},
    						userid: uid,
    						start: starts,
    						end: new Date().getTime(),
    						duration: TimeMe.getTimeOnCurrentPageInSeconds(window.location.href)
    					},
    					async: false
    				});
    			});
    		}
    	});
    	
    </script>
    Die anschließende PHP-Datei befindet sich in der Dateiverwaltung und ist auf öffentlich gestellt, da sonst eine Fehlermeldung seitens Contao kommt (so etwas sollte doch sicherlich nicht öffentlich sein oder?). Meine Frage ist nun, ob meine Vorgehensweise sicher für Angriffe ist oder ob und wie ich anders vorgehen sollte, da ich es erst einmal lauffähig machen wollte? Leider habe ich bei so etwas kaum Erfahrung, weshalb mir jeglicher Rat als hilfreich erscheint.

    Edit: Ist es möglich, das Datenbankobjekt innerhalb der PHP-Datei zu nutzen? Ich habe es nur mit einer erneuten Verbindung zur Datenbank via PDO geschafft, andernfalls sagt er mir, dass er die Klasse nicht finden kann, wenn ich es mit
    Code:
    use Contao\Database;
    
    $dataBase = \Database::getInstance();
    probiere.
    Geändert von asfga (09.10.2020 um 15:22 Uhr)

  2. #2

  3. #3
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Lächelndes Gesicht

    Mit markocupic/contao-bundle-creator-bundle kannst du dir in wenigen Schritten aus dem Backend heraus eine Erweiterung zusammenklicken. Wähle ganz zu unterst "Benutzerdefinierte Route hinzufügen".

    Ist die Erweiterung generiert, geht es darum den Controller an deine Bedürfnisse anzupassen. Über DependencyInjection wirst du die Datenbank-Connection im Konstruktor deines Controllers
    injecten müssen.

    Wie du das machen kannst, siehst du hier und hier.

    Das alles ist halt ziemlich viel, wenn du dich noch nicht so auskennst in der Symfony Welt.
    Natürlich kannst du das aber auch quick and dirty lösen :-)

    Ein guter Anhaltspunkt ist die Contao Entwicklerdoku oder ein Hello world bundle, das ich mal erstellt habe.

    Liebe Grüsse

    Marko
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  4. #4
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard

    Danke für die Rückmeldungen! Ich werde es die Tage mal anschauen und probieren. Ggf. melde ich mich noch einmal, sollte ich irgendwo auf Hindernisse stoßen.

  5. #5
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard

    Ich hatte endlich etwas Zeit gefunden und konnte mich dem Routing Thema widmen. Ich habe es soweit hinbekommen, dass ich mir eine Route erstellt und meine gewünschte Funktion dort niedergeschrieben habe. Wenn sich der Nutzer auf meinen Webseiten bewegt, dann wird diese Route per Ajax Call aufgerufen und etwas wird in die Datenbank geschrieben.

    Da ich noch etwas unerfahren bin, hier meine Frage: Die Route ist händisch aufrufbar, wird aber nirgendswo aufgeführt (z.B. kein Navigationspunkt). Muss ich nun noch Sicherheitsvorkehrungen vornehmen, falls ja wie würden diese denn aussehen? Theoretisch könnte ja jemand einfach die Route aufrufen und die dortige Query starten und etwas in die DB schreiben lassen, obwohl es gar nicht gewollt ist.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •