PHP-Sessions und statische Navigation

Hallo,

ich will mich mit meinem gefährlichen Halbwissen in PHP-Sessions einarbeiten und habe gleich eine grundsätzliche Frage:

Wie gehen PHP-Sessions mit einer statischen Javascript-Navigation zusammen, die aufgrund ihres Umfangs offline generiert wird und deren Links daher nicht veränderbar sind?

Geht so etwas mit Cookies? Und wenn ja: Geht es eventuell auch anders, da einem sämtliche Tutorials von Cookies abraten?

Wer weiss was?

:o) Der Jens

Hi auch… ich versuch mich einfach mal *g*

Wie gehen PHP-Sessions mit einer statischen
Javascript-Navigation zusammen, die aufgrund ihres Umfangs
offline generiert wird und deren Links daher nicht veränderbar
sind?

Wie Du schon sagst - JavaScript ist quasi offline und sessions online. d.h. solange die Session noch gültig ist wird es keine Probleme bei den Links geben. Allerdings ist da immer die Codestruktur entscheidend. Vor allem - woher kommt das JavaScript denn? Es dürfte doch wohl auch aus einer php Seite entspringen bzw evtl eine .js oder .html Datei… Zumindest wenn der JS code im Quelldokument direkt drinnen steht ist es auch kein Problem an Links etwa noch Session Variablen hinzuhängen, aber eigentlich ist das auch nicht unbedingt nötig.

Geht so etwas mit Cookies? Und wenn ja: Geht es eventuell auch
anders, da einem sämtliche Tutorials von Cookies abraten?

dazu müsstest Du schon ein wenig konkreter werden, wie Deine Navigation aufgebaut ist und/oder sein soll.

Hallo !

Hallo,

ich will mich mit meinem gefährlichen Halbwissen in
PHP-Sessions einarbeiten und habe gleich eine grundsätzliche
Frage:

Wie gehen PHP-Sessions mit einer statischen
Javascript-Navigation zusammen, die aufgrund ihres Umfangs
offline generiert wird und deren Links daher nicht veränderbar
sind?

Wie sieht die denn aus ? Werden per JavaScript die entsprechenden Links mit document.write in der Seite ergänzt ? Wenn ja (und Sessions auch ohne Cookies gehen sollen), müssen diese URLS, sofern die auf PHP Seiten verweisen, die die Session benötigen, um „?“.session_name()."=".session_id() im PHP ergänzt werden, ggfs. kann man, je Nach Aufbau des JS-Codes, das Ganze recht einfach per preg_replace machen und den JavaScript-Code per PHP ausgeben lassen.
Für näheres bräuchte man aber den verwendeten Code.

Geht so etwas mit Cookies? Und wenn ja: Geht es eventuell auch
anders, da einem sämtliche Tutorials von Cookies abraten?

Solange wie Cookies beim Benutzer an sind funktioniert es auf jeden Fall, da dann die SessionID über den Cookie ausgelesen werden kann. Allerdings geht das z.B. beim IE spätestens bei einer Weiterleitung über einen Frame schief…

Alexander

Hmmm, ich habe mich wohl tatsächlich etwas unklar ausgedrückt, sorry.

Statisch heißt, dass die in der Navigation verwendeten Links offline generiert werden.

Genauer gesagt: Ich verwende ein freies Javascript, das closed source ist und seine Link-Daten aus einer Textdatei einliest, die ich offline generiere und hochlade. Ich kann also online keine SID an die Links dranhängen, es geht nicht.

Außerdem wird die Navigation aus einer Datenbank erzeugt und ist so umfangreich, dass sie unmöglich bei jedem Seitenaufruf online generiert werden kann.

Beispiel:

http://www.rpgcult.com/gamedetail.php?id=105&length=…

Habt Ihr irgendeine Idee? Danke.

:o) Der Jens

Hallo Jens !

Brrr, das ist ja Java und kein JavaScript, das ist antürlich etwas anderes.

Als Erstes würde ich einmal versuchen, dem Java-Programm statt menu.txt als Parameter „menu.php?“.SID unterzuschieben. Das Java-Programm macht schließlich auch nur einen HTTP-Request, das sollte dem egal sein, wo er seine Daten herbekommt.
Dieses menu.php passt dann die Links aus der menu.txt entsprechend an und gibt sie an das Java-Programm weiter:

<?php session_start();
Header("Content-Type: text/plain"); $menu = implode("", file("menu.txt")); $menu = preg\_replace("/^(.\*)\\|(.\*)\\?(.\*)\$/m", "\\1|\\2?\\3&".SID,$menu); $menu = preg\_replace("/^(.\*)\\|([^?\r\n]\*)\$/m", "\\1|\\2?".SID,$menu); echo $menu; ?\> Alexander
1 Like

Alexander, es funktioniert !!! Das gibt erstmal pauschal einen Stern von mir. :o)

Brrr, das ist ja Java und kein JavaScript, das ist antürlich
etwas anderes.

Sorry, mit Java und ihren Arten habe ich mich noch nicht befasst. Mir reichen HTML, PHP und MySQL fürs erste.

$menu = preg_replace("/^(.*)\|(.*)\?(.*)$/m",
„\1|\2?\3&“.SID,$menu);
$menu = preg_replace("/^(.*)\|([^?\r\n]*)$/m",
„\1|\2?“.SID,$menu);

Könntest Du mir nur mal grob das preg_replace erklären, eh ich mich durch die Syntax gewühlt habe? (Achtung, fauler Jens !) Und warum zwei Anweisungen? Würde nicht eine reichen?

Ich habe das ganze mal offline ausprobiert und es wird bei jedem Seitenaufruf eine neue SID erzeugt. Das dürfte doch eigentlich nicht sein, oder? Session_start erzeugt doch nur eine neue Session, wenn keine alte vorhanden ist?

Außerdem quält mich die Frage nach der Rechenzeit. menu.txt ist über 70KB groß. Und da noch die SID dranhängen, bei jedem Seitenaufruf? Offline gehts ziemlich schnell, aber online?

Danke für Deine Hilfe.

:o) Der Jens

Hallo Jens !

Alexander, es funktioniert !!! Das gibt erstmal pauschal einen
Stern von mir. :o)

Brrr, das ist ja Java und kein JavaScript, das ist antürlich
etwas anderes.

Sorry, mit Java und ihren Arten habe ich mich noch nicht
befasst. Mir reichen HTML, PHP und MySQL fürs erste.

$menu = preg_replace("/^(.*)\|(.*)\?(.*)$/m",
„\1|\2?\3&“.SID,$menu);

Suche nach
^ am Zeilenanfang
(.*) ein oder mehrere beliebige Zeichen, die sich gemerkt werden
\| danach eine | (Die \ sind nötig, weil | eine Sonderbedeutung hat)
(.*) ein oder mehrere beliebige Zeichen, die sich gemerkt werden
\? dann ein ?
(.*) ein oder mehrere beliebige Zeichen, die sich gemerkt werden
$ das Zeilenende

Ersetze durch
\1 gemerketen Ausdruck 1
| ne Pipe
\2 gemerketen Ausdruck 2
? nen Fragezeichen
\3 gemerketen Ausdruck 3
& und die SID

$menu = preg_replace("/^(.*)\|([^?\r\n]*)$/m",
„\1|\2?“.SID,$menu);

Suche nach
^ am Zeilenanfang
(.*) ein oder mehrere beliebige Zeichen, die sich gemerkt werden
\| danach eine | (Die \ sind nötig, weil | eine Sonderbedeutung hat)
([^?\r\n]*) ein oder mehrere Zeichen, die kein ? oder Zeilenende sind, die sich gemerkt werden
$ das Zeilenende

Ersetze durch
\1 gemerketen Ausdruck 1
| ne Pipe
\2 gemerketen Ausdruck 2
? nen Fragezeichen und die SID

Könntest Du mir nur mal grob das preg_replace erklären, eh ich
mich durch die Syntax gewühlt habe? (Achtung, fauler Jens !)
Und warum zwei Anweisungen? Würde nicht eine reichen?

Weil die SID einmal mit & (schon Parameter angegeben) und einmal mit ? (noch keine Parameter) angehangen werden muss.

Ich habe das ganze mal offline ausprobiert und es wird bei
jedem Seitenaufruf eine neue SID erzeugt. Das dürfte doch
eigentlich nicht sein, oder? Session_start erzeugt doch nur
eine neue Session, wenn keine alte vorhanden ist?

Ja. Hast du im param-Tag des Applet auch „menu.php?“.SID verwendet ? Da muss die SID mit übergeben werden…

Außerdem quält mich die Frage nach der Rechenzeit. menu.txt
ist über 70KB groß. Und da noch die SID dranhängen, bei jedem
Seitenaufruf? Offline gehts ziemlich schnell, aber online?

Naja, PHP macht das ja bei enable-trans-sid auch automatisch für alle Links.

Alle PHP - Systeme, die Sessions verwalten, müssen ggfs. die URLs umschreiben.
Du könntest, bevor du ersetzt, mal in $_COOKIE nachsehen, on die SID per Cookie weitergegeben wird, dann kannst du die das Ersetzen sparen.
Außerdem kannst du das Menu auch nach dem Ersetzen in $_SESSION speichern, dann brauchst du nur ein Mal pro Benutzer zu ersetzen.
Solche Optimierungen habe ich nicht mit dazugeschrieben…

Alexander

Alexander,

herzlichen Dank für Deine sehr guten Hinweise an einen Viertel- bis Halbwissenden. Mit dieser Basis kann ich viel zielstrebiger probieren und weiterarbeiten. Falls ich nochmal an Grenzen stoße, melde ich mich wieder.

Und falls Du mal ein Problem mit Deiner Gehaltsabrechnung hast oder anderweitig mit Steuern oder Buchhaltung kämpfst… ich stehe bereit.

:o) Der Jens