Zum Inhalt springen

Sessionübergabe ohne Cookies

Erstellt am 9. Mai 2011 · 5 Antworten · letzte Antwort am 9. Mai 2011

Tags: PHP, Frage

mike_72 ·

Hallo Forum,

wie kann ich in einer Extension eine Session übergeben (klar, über die URL), wenn im Browser Cookies deaktiviert sind.

Ich habe ein mehrseitiges Formular in einer eigenen Extension, bei dem der User nach erfolgreichem Ausfüllen der einzelnen Seiten beliebig zurückspringen und Daten ändern kann kann. D.h., ich muss auf jeder Seite die bereits eingegebenen Daten als Value´s vorbelegen. Dies mache ich über die Session was soweit auch alles funktioniert. Das Problem ist, wenn im Browser Cookies deaktiviert sind. Dann sind die eingegebenen Daten auf der nächsten Seite weg.

// Formulardaten in der Session speichern
$GLOBALS["TSFE"]->fe_user->setKey('ses', 'formdata', $formdata);
// weiter zu Seite 2 (ID 162)
$link = $this->pi_getPageLink('162', '', '');
$link = t3lib_div::locationHeaderUrl($link);
header('Location: '.$link);
exit();

config.ftu = 1 ist gesetzt und an die "normalen" Seiten wird die Session auch an die URL angehängt.
Nur an den header('location') nicht. In PHP mache ich das immer so aber das funktioniert hier nicht:

header('location:http://www.domain.de/seitenname.html?'.session_name().'='.session_id());

Hat jemand eine Idee? Ich habe schon diverse Ansätze gefunden, aber leider hat bisher nichts funktioniert.
Vielen Dank schonmal!

TYPO3 4.5.3
Cooluri 1.0.20

exit;

Unbekannter Benutzer ·

Hallo Mike
Ich würde das einfach mit Javascript lösen.
Das Ganze Formular in die Seite rein, und dann per JS steuern, welche Bereiche angezeigt werden sollen.
Der Vorteil:
- Nur ein Formular
- Daten bleiben quasi gespeichert, da du die Felder lediglich ein und ausblendest

Gruss Reeko

aemka ·

Was kommt denn bei $this->pi_getPageLink('162', '', ''); raus?

Da muss doch auch ein ftu=irgendwas dran hängen wenn config.ftu = 1 gesetzt ist. Wenn nicht, ist das meiner Meinung nach ein Core-Bug.

Wahrscheinlich viel weniger aufwendig wäre aber, dass du alles in ein großes Formular machst und nur mit js / jquery in das Formular Tabs oder ähnliches reinbaust, dass es einem mehrseitig vorkommt.

mike_72 ·

Hallo,

Javascript wäre zwar eine Möglichkeit, aber auch das kann man im Browser deaktivieren. Und dann stehe ich vor dem selben Problem.
Ich muss eine Lösung haben, die ohne Cookies, JavaScript etc. sicher funktioniert.
JavaScript, AJAX etc. sind nette Features, aber die Grundfunktionalität muss auch ohne dies gewährleistet sein.

@aemka
Bei dem Link kommt nichts raus. Nur die reine URL: http://www.domain.de/form_step2.html
An einen Core Bug habe ich auch schon gedacht. Aber ich bin doch sicher nicht der Erste, der auf dieses Problem stösst, oder? In "reinem" PHP hänge ich automatisch immer die Session an den HeaderLocation als Fallback Lösung mit dran. Ich dache, dass TYPO3 das eben auch "alleine" macht.

aemka ·

TYPO3 sollte an alle über die TYPO3-Api generierten Links das ftu anhängen, wenn das global aktiviert ist. Da das aber sehr selten jemand nutzt, kann ich mir vorstellen, dass du tatsächlich einen Core-Bug gefunden hast. Ich würde ihn mal auf Forge eintragen.

Was JS angeht, das ganz kann man doch wunderbar so bauen, dass ohne JavaScript es ebenso funktioniert. Der einzige Nachteil für nicht JS-ler wäre ja nur, dass diese dann keine Schritte sondern ein einziges langes Formular haben.

mike_72 ·

Klar kann man das auch ohne Javascript etc. bauen. Aber der Kunde will eben mehrere Schritte haben. Ausserdem ist das Formular bereits so umgesetzt (war viel Arbeit!) und dieses Problem mit der Session haben wir erst ganz zum Schluss durch Zufall entdeckt bzw. ein Kunde meine, dass er eine leere Mail bekommen hat. Logisch, denn die Daten waren ja weg.

Da ich noch nie auf Forge soetwas gemacht habe und überhaupt keine Ahnung habe, wäre ich dankbar, wenn das jemand für mich erledigen könnte. Zumal mein Englisch auch nicht soo ist.
Ich bedanke mich schonmal vorab.