• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Es regnet, ist neblig und kalt, alle sind krank und der Chef wird zunehmend cholerisch. Das Thema des Monats ist also folgerichtig --> Das Grau(en)
    Wir sind gespannt, war Euch dazu einfällt! Zum Wettbewerb --> Klick

Aufenthaltszeit in php Variable speichern

  • Ersteller Applefan88
  • Erstellt am

Applefan88

Gast
Hallo,
kann mir einer sagen, wie man die Zeit, die ein User auf einer Website verbracht hat in einer Variable von php Speichern kann.
Ich wollte eine Art Abrechnungsverfahren erstellen, wobei im Hintergrund die Zeit bis zum schließen der Seite gemessen wird und anschließend das Guthaben - der Zeit gerechnet wird.

Oder noch besser wäre es, wenn das ganze in Echtzeit berechnet werden könnte z.B. mit Javascript. Ich habe aber leider keine Ahnung wie ich das nun bewerkstelligen kann, da ich von Javascripten keine Ahnung habe. Kann mir einer helfen?
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Wenn Du mit Hilfe von JavaScript Zeitberechnungen anstellst, bist Du immer auf Gedeih und Verderb der möglicherweise verstellten Uhr des Clients angewiesen. Daher ist das mit der Messung per PHP gar keine abwegige Idee und geht so:

1. Jedes eigenständige Script enthält als erste Anweisung session_start();
2. Jetzt kannst Du innerhalb des superglobalen Arrays $_SESSION[] beliebige Werte speichern, zum Beispiel:
Code:
<?

session_name('apfelfan88_session');
session_start();
$_SESSION['Startzeit'] = (!isset($_SESSION['Startzeit'])) ? time() : $_SESSION['Startzeit'];
?>
Jetzt hast Du, falls nicht bereits in der User-Sitzung gesetzt, die aktuelle Zeit gespeichert und kannst diese später hervorzaubern.
 

Applefan88

Gast
Vielen Dank,
aber ginge es auch so, dass wenn z.B. 60 min abgelaufen sind die Seite eine Fehlermeldung ausgibt und der Client neues Guthaben erwerben muss. Dass Php einen Countdown zählt z.B. 5 € = 60 Min. ?
 

MACRASSI

Gelbe Schleswiger Reinette
Registriert
21.11.04
Beiträge
1.754
Klar, mit ner if und ner for schleife oder so... :)

Gruß Rasmus
 

Applefan88

Gast
ich bräuchte einen Timer in PHP, der z.B. 60 Min läuft, kann mir einer ein Beispiel geben?
 

mfkne

Weisser Rosenapfel
Registriert
03.04.06
Beiträge
776
Das willst Du nicht wirklich, denn dafür müsste das Script 60 Minuten lang laufen.
 

Applefan88

Gast
Aber es muss doch eine Möglichkeit geben den Zugriff auf eine Seite zeitlich zu begrenzen?
 

Applefan88

Gast
Ich habe so etwas gefunden, kann man damit nicht etwas anfangen?

Code:
<script type="text/javascript">
 var s=0
 function Timer(){
  document.formel7.time.value=s;
  s++;
  window.setTimeout('Timer()',1000) // Pause
 }
</script>

<body onLoad="Timer()">

<form name="formel7">
 <input type=text size=6 name="time">
</form>

z.B: Wenn in der input text box 1000 gezählt wurde wird die seite geschlossen!
Das muss doch zu machen sein?
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
In diesem Fall müsste ich lediglich JavaScript abschalten und würde damit den Timer umgehen.

Hier ist Umdenken gefragt. Im Gegensatz zu Applikationsprogrammierung musst Du hier in Seitendarstellungen denken. Das heißt, in dem Moment, wo der Benutzer die Seite im Browser angezeigt bekommt, ist in aller Regel die Laufzeit Deines Skriptes bereits beendet, denn die Darstellung im Browser ist ja das Ergebnis Deiner Serverprogrammierung (Ausnahme: AJAX, was aber auch wiederum mit JavaScript einhergehen muss).

Du kannst demnach nicht einfach ein PHP-Skript schreiben, welches nach 60 Minuten den Browser anbimmelt, denn wie soll es diesen im WWW ausfindig machen? Daher prüft man einfach die letzte Zugriffszeit, die man via Cookie auf dem Rechner des Clients speichert. Kommt derselbe Browser-Client wieder vorbei, kann man die letzte Zugriffszeit durch das Auslesen des Cookies und durch das Zuordnen zu einer Sitzung ermessen. Klickt der Besucher mal wieder auf einen Link und ist der letzte Klick zu lange her, wird nun ein Ausweg angezeigt, da die Laufzeit der Sitzung überschritten wurde (Session Time-Out).

Im Einzelnen geht das so, wie schon oben beschrieben:
Code:
<?php

session_name('apfelfan88_session');
session_start();

$maximale_sitzungsdauer = 3600; // Sekunden
$jetzt = time();

if (isset($_SESSION['letzter_zugriff'])) {
    $differenz = $jetzt - $_SESSION['letzter_zugriff'];
    if ($differenz > $maximale_sitzungsdauer) {
         header('Location: http://go.disney.com/');
         exit(),
    }
} else {
    $_SESSION['letzter_zugriff'] = time();
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Diese Seite - kein Name</title>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
</head>
<body>
<p>BLA</p>
</body>
</html>
 
  • Like
Reaktionen: Nathea und amarok

Applefan88

Gast
wow, vielen dank das dürfte schon reichen! :-D