Fach:Web-Engineering HA20070917 Numguess in PHP
Aus StudyWiki
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 GUI | Michel | done |
| Login formular | Antonio | done |
| Enhance Login formular with fancy stuff | Michel | done |
| eigenes Session Management implementieren | Michel | done |
| init - SSN erstellen | Michel | done |
| init - Random nummer generieren | Kaya | done |
| init - Name in session speichern | Antonio | done |
| Game formular | Kaya und Antonio | done |
| GF - versuche anzeigen | Kaya und Antonio | done |
| GF - zahlen weitergeben | Kaya und Antonio | done |
| GF - Resultat ausgeben | Kaya und Antonio | done |
| Hall of Fame - anzeigen | Michel | done |
| Hall of Fame - abspecihern | Michel | done |
[bearbeiten] Links
- Code Repository
- Applikationswebseite
- Implementation in Drupal
- Sourcen Herunterladen
- Screenshots der Applikation
[bearbeiten] Dokumentation
[bearbeiten] Diagramme
[bearbeiten] Game-Logic
[bearbeiten] Overall Sequenz Diagramm
[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.


