Fach:Web-Engineering HA20070917 Numguess in PHP

Aus StudyWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[bearbeiten] Aufgabe

Unsere Aufgabe ist es eine Applikation in PHP/Ajax zu schreiben, die eine Zahl zufällig generiert und mit Benutzereingaben Vergleicht. Durch vergleichen auf dem Server wird dem Benutzer als Antwort zur eingegebenen Zahl "too low", "too high" oder "right" zurückgegeben.

[bearbeiten] Requirements

[bearbeiten] Draft Usecases

[bearbeiten] UC01 Name

[bearbeiten] Description

Benutzer gibt Namen ein, der später für die Hall of Fame verwendet wird.

Das ganze wird in einer Session gespeichert die auf dem Server läuft.

[bearbeiten] Actors
  • User
[bearbeiten] Auslöser

User Besucht die Webseite.

[bearbeiten] Preconditions

none

[bearbeiten] Postconditions

Session wurde generiert und der Name des users darin gespeichert. Spiel beginnt...

[bearbeiten] Normal flow
  • Benutzer tippt seinen namen ein
  • Benutzer drückt <return>
  • Spiel wird gestartet
[bearbeiten] Alternate flow

none

[bearbeiten] Exceptions

none

[bearbeiten] UC02 Raten

[bearbeiten] Description

Benutzer kann Zahl eingeben, diese wird auf dem Server mit der Sessiongenerierten Zahl verglichen. Als Antwort erhält er entweder too low, too high oder right

[bearbeiten] Actors
  • User
[bearbeiten] Auslöser

Game wird gestartet.

[bearbeiten] Preconditions

Es wurde eine Session erstellt und der User hat seinen Namen angegeben.

[bearbeiten] Postconditions

Die count variable in der session des users wurde incrementiert und auf dem Bildschirm wird das Resultat angezeigt.

[bearbeiten] Normal flow
  • Benutzer gibt Zahl in Eingabefeld ein
  • Benutzer drückt button senden
  • User sieht das Resultat des vergleiches mit der generierten Zahl auf dem Bildschirm
[bearbeiten] Alternate flow

none

[bearbeiten] Exceptions

none

[bearbeiten] Anforderungen von Trolese für eine gute Note

  • Eigenes Sessionhandling einbauen
--> Umgesetzt durch die Session class
  • Http posts verwenden
--> umgesetzt durch Ajax calls, die PHP Seiten aufrufen und Post Variablen per URL encoding übergeben
  • Hall of Fame
--> Umgesetzt durch abspeicherung bei treffer in hof.dat

[bearbeiten] Präsentations- Abgabetermin

12.11.2007 (Planung Fertigstellung der Arbeit spätestens 09.11.2007)

[bearbeiten] Gruppe

[bearbeiten] TODO's

Was?wer?Status
Applikationsrahmen HTML GUIMicheldone
Login formularAntoniodone
Enhance Login formular with fancy stuffMicheldone
eigenes Session Management implementierenMicheldone
init - SSN erstellenMicheldone
init - Random nummer generierenKayadone
init - Name in session speichernAntoniodone
Game formularKaya und Antoniodone
GF - versuche anzeigenKaya und Antoniodone
GF - zahlen weitergebenKaya und Antoniodone
GF - Resultat ausgebenKaya und Antoniodone
Hall of Fame - anzeigenMicheldone
Hall of Fame - abspecihernMicheldone

[bearbeiten] Links

[bearbeiten] Dokumentation

[bearbeiten] Diagramme

[bearbeiten] Game-Logic

Bild:WE-HA20070917_dia_game-logic.png

[bearbeiten] Overall Sequenz Diagramm

Bild:WE-HA20070917_dia_overall-sequence.png

[bearbeiten] Core Functions

[bearbeiten] Session Management

Wird in der Datei session.class.php abgehandelt.

Die Dokumentation dazu befindet sich direkt im code.

Um die Session zu benützen, muss im jeweiligen script

 $Session = new Session();
 $sid = $Session->start();

angegeben werden, danach ist der Hash des clients in der Variable $sid gespeichert.

Wenn ein cookie mit dem entsprechenden hash auf dem client vorhanden ist, wird diese session fortgesetzt, ansonsten wird eine neue Session initialisiert.

Um zu verhindern, dass der Session inhalt Plaintext ausgelesen werden kann, wird eine simple Methode namens Base64 encoding verwendet.

Das Array wird Serialisiert und der Serialisierte String danach mit base64 encodiert beim umgekehrten fall, das ganze vice versa.

 Als Tipp am rande:
 Damit kann man z.B. die MS Terminal Server Beschränkung umgehen, 
 die es nicht erlaubt binäre Daten vom TS auf den client zu kopieren, 
 da sie nach dem base64 encoding als normaler ASCII text gehandhabt werden 
 und per <ctrl>-C / <ctrl>-V der Inhalt kopiert werden kann.

In unserer Demo applikation, sind die ssn Datein in einm Unterordner gespeichert. Im Produktiven fall ist es sehr zu empfehlen diesen Ordner Ausserhalb des Webroots zu erstellen.

Desweiteren fehlt dieser Klasse noch das Hardening, sprich es ist noch sehr einfach ein Session Hijacking durchzuführen. Dies haben wir aus Zeitgründen weggelassen.

[bearbeiten] Communication Methods

[bearbeiten] AJAX calls

Der JS code für die AJAX calls ist im Header der Datei index.html abgelegt.

Die Funktionen PHPscriptCall(url, resultDiv), loadInBackground(url, resultDiv) und getAnswer(url) machen die jeweiligen HTTP/Post requests.

Sie sind nahezu identisch bis auf die kleinigkeit, dass bei der Funktion PHPscriptCall wärend dem Laden eine ein Waiting Layer (DIV) auf der Seite angezeigt wird mit einem Animierten Matrix Tux darin und bei der LoadInBackground nicht.

Die Funktion getAnswer macht einen call auf die Jeweilige URL und wertet danach die Antwort in einer anderen Funktion aus um eine Spezifizierte Aktion auszuführen.

Persönliche Werkzeuge
Seminare
Fächer Grundstudium