Ergebnis 1 bis 15 von 15

Thema: Cookies in PHP - Textadventure

  1. #1

    Session für PHP - Textadventure und Wahlmenü

    ich habe ein Problem beim Erstellen eines Textadventures mit Hilfe von PHP. In einer zweispaltigen Tabelle soll mittels include links ein Inventarmenü und rechts der Text nebst Links angezeigt werden. Während der Story soll man hin und wieder Gegenstände finden und mitnehmen können, die dann im Inventar als Grafik angezeigt werden. Zunächst hatte ich das mit cookies gemacht, finde das aber etwas umständlich, weil man ja immer eine Zwischenseite mit Weiterleitung braucht (zumindest kenne ich keine andere Möglichkeit - kenne mich leider nicht groß aus mit php). Hinzu kommt, dass es damit nur funktioniert, wenn der Leser der Geschichte auf seinem PC Cookies erlaubt hat.
    Gibts dafür eventuell eine bessere Lösung?

    Geändert von Tha_Ira (03.04.2005 um 17:47 Uhr)

  2. #2

  3. #3
    hm, bei den Sessions blick ich einfach nicht durch. Hab mir das heute früh auch schon mal in einem PHP-Tut angesehen, bin aber nicht schlau daraus geworden. Da steht jedesmal was von Username und Passwort, aber sowas brauch ich ja überhaupt nicht. Kann man das auch einfach weglassen?

  4. #4
    Zitat Zitat von Tha_Ira
    hm, bei den Sessions blick ich einfach nicht durch. Hab mir das heute früh auch schon mal in einem PHP-Tut angesehen, bin aber nicht schlau daraus geworden. Da steht jedesmal was von Username und Passwort, aber sowas brauch ich ja überhaupt nicht. Kann man das auch einfach weglassen?
    Joa, ignorier den Passwortkram.
    Der Clou an Sessions sind die Sessionvariablen die man Scriptseitenübergreifend setzen kann.
    Ich kann die den ganzen Sessionkram nun allerdings nicht detailliert erklären, ich bin dazu zu müde.
    Wenn ich etwas schlaf nachgeholt hab und es dir einer der vielen Helfer hier noch nicht näher gebracht hat, versuch ich es dir zu erklären. Derzeit bin ich sigar zu müde den Rechner runterzufahren... ich lass ihn einfach an. §doz

  5. #5
    Nundenn.
    Um mit Sessionvariablen arbeiten zu können, musst du dem Server sagen, dass er eine Session starten soll:

    PHP-Code:
    <?php
    session_start
    ();
    ?>
    Soweit so gut.
    Nun muss der Server aber wissen, welchem Besucher, der sich gerade durch deine Seite klickt, er welche Session (Übers.: Sitzung/Mappe) zuordnen soll. Das geschieht über die sogenannte SessionID. So muss der Besucher sich mit jener SessionID beim Server authentifizieren, damit der Server weiß, welche Sessionvariablen zu welchem User gehören (wiederhol ich mich? O_o).
    Diese SessionID's kann man durch 2 Wege übergeben lassen:
    - Per Cookie beim Besucher speichern.
    - Die SessionID über die Links an die Folgescripte übergeben.

    Ich geh hier mal nur auf die Cookievariante ein, da sie in den meisten Fällen ausreicht.

    Wenn PHP auf dem Server entspr. konfiguriert ist, legt es beim Start einer Session automatisch einen Cookie mit der SessionID beim Besucher ab.
    Tut er es nicht, mach es so:
    PHP-Code:
    <?php
    session_start
    ();
    setcookie(session_name(), session_id(), time()+7200"/");
    ?>
    Damit ist dafür gesorgt, dass jedem Besucher auf jeder Scripseite seine eigene Session zugeteilt wird.
    Diesen Codeschnipsel musst du übrigens auf jeder Scriptunterseite einfügen, in der auf die Sessionvariablen, die wir gleich setzen werden, zugegriffen werden soll.

    Nun stell dir eine Session wie einen Ordner vor, zu dem nur ein bestimmter User mit der entsprechenden SessionID Zugang hat. In diesen Ordner kannst du dann Variablen und Werte ablegen. Diese Variablen und Werte sind dann nicht nur in dem Script gültig, in dem sie definiert wurden, sondern auf jeder einzelnen Scriptseite, auf der der obere Session-Startcode eingebunden ist.

    Also setzen wir mal eine Sessionvariable:
    PHP-Code:
    <?php
    session_start
    ();
    setcookie(session_name(), session_id(), time()+7200"/");

    $_SESSION[item] = "Zweiköpfiges Eichhörnchen";
    ?>
    angenommen dies steht in script1.php und der Besucher geht nun zu script2.php in der dies steht:
    PHP-Code:
    <?php
    session_start
    ();
    setcookie(session_name(), session_id(), time()+7200"/");

    echo 
    $_SESSION[item];
    ?>
    Dann wird "Zweiköpfiges Eichhörnchen" ausgegeben, und das obwohl du den Wert weder per Formular, noch per Adresse, noch direkt per Cookie übergeben hast.
    Sessionvariablen kannst du so viele setzen wie du lustig bist:

    PHP-Code:
    <?php
    session_start
    ();
    setcookie(session_name(), session_id(), time()+7200"/");

    $_SESSION[item][0] = "Zweiköpfiges Eichhörnchen"
    $_SESSION[item][1] = "Streichhölzer"
    $_SESSION[item][2] = "Sonnenscheibe"

    $_SESSION[switch]=1;
    $_SESSION[geld]=2341;
    ...
    ?>
    Wie du siehst sind Sessions geradezu perfekt für ein Browseradventure.
    PHP bietet in seinen Sessionfunktionen sogar eine Möglichkeit eine Session permanent zu speichern damit ein Besucher auch nach längerer Zeit wieder auf seine Session zugreifen kann, denn zumeist verfällt eine Session wieder nach 30 Min-2 Std. Inaktivität.
    Allerdings müsstest du dich über diese Speicherfunktion selbst informieren, ich hab es bisher nie gemacht, es dürfte aber recht einfach sein.

    Hast du noch Fragen dazu?
    Wenn dich Sessions interessieren, lies dir ggf. auch noch diese Seite hier durch und vielleicht auch die Artikel über Session-Funktionen im Manual.

  6. #6
    Vielen Dank erstmal. Ich hoffe, dass ich das dann auch so hinkrieg, hab aber noch eine Frage dazu. Kann man in einer Session den Wert einer Variable auch über einen Link übergeben und wenn ja, wie genau muss ich das dann schreiben. Ich krieg das nämlich nicht hin.
    Und wo muss ich eigentlich session_destroy(); hinschreiben? Falls jemand das Adventure nochmal anfangen will, muss ja vorher alles wieder auf den Ausgangswert zurückgesetzt werden. Ich hatte es ganz am Anfang der Seite, über dem Header, aber da kam ne Fehlermeldung.

  7. #7
    Ich hab da noch ein anderes Problem und frag gleich mal hier. Hab den Betreff deshalb etwas abgewandelt.

    Auf meiner Webseite soll man zwischen zwei verschiedenen Menüs (Imagemap oder Textnavi) wählen können. Ich brauche also 2 Variablen, eine für die Navi und eine für die Inhaltsseiten. Bisher schaffe ich es aber nicht, dass das gerade gewählte Menü beim Laden einer anderen Inhaltsseite bestehen bleibt, sondern es wird dann wieder das Ausgangsmenü geladen. Umgekehrt ists natürlich genauso, wenn man das Menü wechselt, geht die gerade gewählte Inhaltsseite flöten und man ist wieder auf der Startseite.
    Ich dachte nun, dass ich das mit eine Session am besten lösen kann, aber ich schaff es nicht. Kann man überhaupt in einer Session den Wert einer Variable auch per Link an die nächste Seite weitergeben? Und wenn ja, wie genau muss ich das dann schreiben?

    Ich hoffe, mir kann jemand hierbei helfen, denn ich krieg das einfach nicht hin. Die PHP_Tuts , die ich bisher gelesen hab, konnten mir leider auch nicht wirklich weiterhelfen.

  8. #8
    Wenn der Wert in einer Sessionvariablen gespeichert wird, ist er eigentlich solange verfügbar, bis der User die Seite wieder verlässt. Wo besteht da jetzt das Problem?
    Ansonsten könnte man das natürlich auch jedesmal per GET übertragen, also an jeden link ein ?menu=<?php echo ($_GET['menu']); ?> anhängen.

  9. #9
    also ich wollte halt wissen, ob man eine Session-Variable an eine URL dranhängen kann und wie das dann aussehen muss. Bei normalen Variablen schreibt man doch einfach ?nav=2 an die URL hinten dran.
    aber wie muss ich das mit einer Session-Variable schreiben? Ich habs so
    PHP-Code:
    <a href="main.php?_SESSION[nav]=2">zum Textmenü</a
    und so
    PHP-Code:
    <a href="main.php?nav=2">zum Textmenü</a
    probiert, aber beides ging nicht. Ich weiß einfach nur nicht, wie man das schreiben muss.

  10. #10
    Sessionvariable kannst du nicht anhängen, du musst sie im Script definieren.
    (mit session_register() und dann $_SESSION[namedersession] = "inhalt")
    Die andere Möglichkeit ist, die Variable als $_GET[namedervariable] in der Form http://deineurl/deinscript.php?get=inhalt an eine URL anzuhängen.

  11. #11
    Hmm, aber geht das damit dann auch, dass Menü und Inhalt immer richtig angezeigt werden? Ich meine, wenn jemand jetzt vom Grafikmenü aufs Textmenü wechselt , danach einen anderen Inhalt ansehen will und zB. den Link zur Magieseite anklickt. Da ist dann bisher das Textmenü jedesmal wieder weggewesen und stattdessen wurde das Grafikmenü ( was ich als Grundeinstelleung angegeben hab) geladen. Genau das soll aber nicht passieren und ich verzweifle hier noch bald, weil ich keinen Durchblick mehr hab

  12. #12
    Zitat Zitat von Tha_Ira
    Hmm, aber geht das damit dann auch, dass Menü und Inhalt immer richtig angezeigt werden? Ich meine, wenn jemand jetzt vom Grafikmenü aufs Textmenü wechselt , danach einen anderen Inhalt ansehen will und zB. den Link zur Magieseite anklickt. Da ist dann bisher das Textmenü jedesmal wieder weggewesen und stattdessen wurde das Grafikmenü ( was ich als Grundeinstelleung angegeben hab) geladen. Genau das soll aber nicht passieren und ich verzweifle hier noch bald, weil ich keinen Durchblick mehr hab
    Überwind dich einfach und lies dir dieses Dokument komplett durch:
    http://tut.php-q.net/sessions.html

    Danach sollte dir einiges klarer sein. Wenn du die Zusammenhänge nicht begreifst, kommst du ohnehin nicht weiter.
    Wenn du dann noch fragen zu Details hast, stell sie hier, aber ohne das du die Basics beherrschst, können wir uns hier die Finger wund tippen beim Versuch dir das zu erklären.

  13. #13
    hab ich bereits mehrmals, auch andere, aber da ist nirgends eine Variante, die dem, was ich machen will, ein bisschen ähnelt. Ich beschäftige mich ja schon seit zwei Wochen nur noch mit diesem Problem. Also mit dem Wahlmenü mein ich jetzt, nicht
    das mit dem Textadventure, denn damit komm ich jetzt gut klar.
    Ich hatte halt gehofft, dass mir das hier jemand etwas verständlicher erklären kann bzw. direkt anhand meines Beispiels. Aber ich bin scheinbar wirklich zu blöd dazu .

  14. #14
    Zitat Zitat von Tha_Ira
    hab ich bereits mehrmals, auch andere, aber da ist nirgends eine Variante, die dem, was ich machen will, ein bisschen ähnelt. Ich beschäftige mich ja schon seit zwei Wochen nur noch mit diesem Problem. Also mit dem Wahlmenü mein ich jetzt, nicht
    das mit dem Textadventure, denn damit komm ich jetzt gut klar.
    Ich hatte halt gehofft, dass mir das hier jemand etwas verständlicher erklären kann bzw. direkt anhand meines Beispiels. Aber ich bin scheinbar wirklich zu blöd dazu .
    Mah! Nix zu blöd. XD
    Ihr Frauen immer mit eurem Selbstzweifel bei allem Technischen...

    Mein Problem ist nun, dass ich kein wirkliches Bild davon hab, wie du dir die Funktionsweise von Sessions vorstellst, gehe aber davon aus, dass du da einem Denkfehler unterliegst. Keine Fakten, aber ich habe da so ein Gefühl das es so ist.

    Das Ding ist jetzt nur, dass ich auch nicht weiß wo ich anfangen soll.
    Ich kenne die PHP-Settings deines Hosts nicht, müsste dir daher also ein Beispielscript schreiben das von allen Umgebungseventualitäten unabhängig funktionieren müsste.
    Und das ist mir ein Tick zu viel Arbeit.

    Daher zweierlei Vorschläge:
    1.: Wir unterhalten uns im direkten Dialog. Wenn du magst, schreib mich per PN an und ich geb dir meine MSN-IM-Adresse oder du mir direkt deine Erlaubnis dich zu adden.
    2.: Du stellst mir, oder uns den phpinfo()-Output deines Hosts zur Verfügung, sowie ein Auszug davon wie du bisher mit Sessions in deinen Scripten gearbeitet hast. Vielleicht kann ich mir anhand dessen ein Bild davon machen was du eventuell falsch verstanden hast, sowie anhand der phpinfo() ein Beispielscript schreiben.

  15. #15
    Dankeschön, aber ich glaub, das hat sich grade erledigt. Hab heute meinen Fehler selber gefunden und das Script nochmal komplett umgeändert.
    Jetzt funzen meine Testseiten endlich so, wie ich es mir vorgestellt hatte *sichganzdollfreut*

Berechtigungen

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