Vorschaltseite Cookie Redirect via PHP

philofdeath

Psycho
Registriert
15 Juli 2013
Beiträge
139
Ort
Bielefeld
Moin!
Ich habe eine Vorschaltseite, wo man zwischen zwei Seiten wählen kann.

Wenn man eine Seite anklickt speichert sich ein Cookie und man wird beim nächsten Besuch direkt auf die Unterseite verlinkt.

Ich habe das ganze so gelöst, dass ich mit Javascript ein Cookie speichere und dann mit PHP checke, ob ein Cookie gesetzt ist.
Das ganze habe ich dann in ein If-Statement gepackt, welches, wenn ein ein Cookie gespeichert ist, einen 301 Redirect ausführt.

[src=php]

if(isset($_COOKIE['seite_1'])){
header("Connection: close");
header("HTTP/1.1 301 Moved Permanently");
header ("Location: https://ngb.to/seite_1/");
}
elseif (isset($_COOKIE['seite_2'])) {
header("Connection: close");
header("HTTP/1.1 301 Moved Permanently");
header ("Location: https://ngb.to/seite_2/");
}

[/src]

Soweit so gut. Funktioniert auch alles.
Ich hätte gerne versucht alles mit PHP umzusetzen und auf das Javascript gänzlich verzichtet.

Gäbe es eine Möglichkeit das nur mit PHP zu lösen?
 
  • Thread Starter Thread Starter
  • #3
Und in wie fern beantwortet das meine Frage?
Wie speichere ich in deinem Beispiel einen Cookie mit PHP auf einem Klick?

--- [2019-11-12 09:26 CET] Automatisch zusammengeführter Beitrag ---

Um meine Frage nochmal zu verdeutlichen, falls es nicht richtig rüber kam.

Gibt es eine Möglichkeit, nur mit PHP, via Klick eine Funktion auszulösen?
 
Ah, ohne redirect nicht möglich da Cookies im header gesetzt werden müssen. Also darfst du davor nichts ausgeben.

Also:
redirect (html reload 0 Sekunden)
cookie setzen
redirect (html reload 0 Sekunden)

Javascript hat die Einschränkung halt nicht da es den Cookie über Browserfunktionen setzen kann.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #5
Mehr wollte ich gar nicht wissen.

Danke ;-)

Die Möglichkeit mit dem Redirect erscheint mir wenig elegant.
Ich denke, dann ist das mit dem Javascript-Cookie die bessere Alternative
 
Tja, umsonst ist der Tod und der kostet Leben. Die Lösung mit Javascript braucht Javascript. Aka Fremdcode der an deinem System rumfummelt. Hab ich default überall aus.

Gibt schon Gründe warum ein PHP Fallback für Javascript Sachen empfohlen ist. Letztendlich deine Entscheidung.
 
  • Thread Starter Thread Starter
  • #7
Grundsätzlich hast du Recht und genau aus diesem Grund habe ich diesen Thread auch erstellt.
Aber ich muss immer den Aufwand/Nutzen-Faktor abwägen, da ich wirtschaftlich bleiben muss.
Und unter diesem Aspekt betrachtet, werde ich es so lassen, wie es ist.
 
Gibt es eine Möglichkeit, nur mit PHP, via Klick eine Funktion auszulösen?
Ja aber nicht ohne ein Neuladen der Seite: du könntest einen Link setzen, der die Seite mit Get Parameter aufruft, oder ein "verstecktes Formular" mit Button für Post, und dann mit PHP den Cookie setzen, wenn der Parameter existiert.
Zwischen "Button / Link geklickt" und "Seite sichtbar, Cookie gesetzt" passiert aber ein Reload.

wenn du den in ein iframe packst läd nur das neu, aber dann hast du Frames drinne xD

Angenehme onClick Funktionalität ist ohne JavaScript kaum machbar.

Du könntest eine Checkbox auf der Auswahlseite haben: "[_] keep this selection" und damit einen Parameter an den Server übergeben um den Cookie zu setzen.
 
das cookie muss ja nur vor der Ausgabe geschrieben werden.

Das heißt du machst auf der ersten Seite ein Feld "Einstellungen speichern (Datenschutzerklärung)" - verlinkst dann bei "Datenschutzerklärung" gleich noch die Infos über die Speicherung des Cookies.
Die Links auf die Buttons machst du innerhalb eines <form> tags als Buttons. Dann solltest du beim Aufruf der Seite 1 oder 2 sowas wie
(Geht statt über get natürlich auch über post) hinbekommen.

Am Anfang der Seite 1 und Seite 2 frägst du den Parameter "save" ab und hinterlegst das Cookie und gibst danach die Seite selber aus.
Beim laden der Vorschaltseite bleibt deine obige Abfrage
 
Nur so als allgemeiner Hinweis, ich denke für deinen Fall würde ein temporärer Redirect (Statuscode 302, 303 oder 307) besser passen als ein 301er. Bedenke, das Proxies, Suchmaschinen und Browser den 301er cachen dürfen und du damit angibst, dass die alte URL nicht mehr gültig ist und dauerhaft verschoben wurde. Da das bei dir aber Cookie-abhängig ist, ist das wohl eher nicht der Fall. Das kann dann mitunter zu recht schwer zu diagnostizierenden Problemen führen.
 
  • Thread Starter Thread Starter
  • #12


Ahh! Das ist natürlich auch cool.
Werde ich morgen direkt mal ausprobieren, ob ich das schnell hin bekomme.


Jap, das habe ich heute schon auf 302 geändert, weil ich mir genau das dachte.
Aber trotzdem danke, dass du mich nochmal hingewiesen hast :)
 
Was machst du, wenn jemand Cookies bei dir verbietet? Zwingen?

Ich hab eine ähnliche Anforderung. Eine Liste mit Inhalten verschiedener Typen. Bis jetzt konnte ein User alle Typen, für die er Zugriffsrechte hat, in einer Liste durchgewürfelt sehen. Es gibt zwar einen Filter, wo er manuell den Inhaltstyp wählen kann aber jetzt soll das so geändert werden, dass auf einer Landingpage gewählt wird, welcher Inhalt ihn interessiert und dann soll er nur noch den sehen. Will er den anderen Inhaltstyp, wechselt er zurück auf die Landingpage und wählt den anderen Typen. Ganz umstricken ist nicht möglich, weil einige Benutzergruppen weiterhin alle Inhalte "gleichzeitig" sehen können sollen und - um es noch komplizierter zu machen - manche Inhalte gleichzeitig mehrere Typen haben können.

Die Variante mit dem Cookie hab ich auch im Kopf gehabt, aber es turnt mich ab, dass dann ohne Cookies nichts mehr geht. Kenne zwar keine Statistik, aber ich glaube Zahl der Besucher mit Scriptblocker und ohne Cookies wäre vernachlässigbar; aber aus Prinzip lieber Lösung ohne Cookie.

Ich überlege, die Auswahl auf der Landingpage in die $_SESSION zu schreiben oder - ich arbeite mit Drupal - Private Tempstore zu verwenden. Ablauf wäre also, für jeden Inhaltstyp ein Link auf eine "Zwischenseite", anhand des Links wird auf dieser Seite (über PHP) die Auswahl in die $_SESSION geschrieben und dann passiert der Redirect - in meinem Fall - auf die Liste. Die Liste liest die Auswahl aus der $_SESSION und zeigt dann nur den jeweiligen Inhaltstyp.
 
aber ich glaube Zahl der Besucher mit Scriptblocker und ohne Cookies wäre vernachlässigbar; aber aus Prinzip lieber Lösung ohne Cookie.
Da das so ähnlich weiter oben schonmal kam:
Aber ich muss immer den Aufwand/Nutzen-Faktor abwägen, da ich wirtschaftlich bleiben muss.
Wenn man wirtschaftlich mit statistisch mixt kommen unter Umständen ganz komische Ergebnisse am Ende bei raus
Überzogenes Beispiel: Ich verkaufe hochwertigen Schmuck, 99% der Prolls haben ein jungfräuliches Browserprofil aber der eine, der wirklich kauft kaufen würde sitzt hinter einem gierigen Filter. Oops!? Das war die wirtschaftliche Variante.

Weniger überzogenes Beispiel: Amazon.com Wenn die cookiefreien Einkauf gewährleisten würden, dann wärs perfekt, so verkaufen die aber immer noch an alle, die komische Browser mit oder ohne deaktiviertem JS verwenden. Wenn man das mit Otto, Ebay oder was auch immer vergleicht: Geht offenbar wirtschaftlich.
Erschwerend dazu kommt halt noch, dass der ganze JS-Scheiss unwirtschaftlich ist, weil man Zeit und Geld auf ein Problem wirft, was man ohne JS gar nicht hat.
 
warum geht ohne Cookie *nichts* mehr? Im Zweifel muss man dann bei jedem Besuch einen Klick mehr machen, oder musst du nach jedem anschauen der Liste auf die landing Page leiten?
 
  • Thread Starter Thread Starter
  • #16

Deine Beispiele finden bei mir aber nicht wirklich Anwendung, da ich auf der Website nichts verkaufe, lediglich Informationen bereitstelle, die ebenso abgerufen werden können, wenn Cookies oder JS nicht aktiviert sind.
Mit Cookie spart man sich einfach nur einen Klick. Deswegen muss ich hier den Aufwand/Nutzen-Faktor abwägen, da der Nutzen, anders als bei einer Verkaufswebsite (die JS/Cookie-Blocker ausschließt), nicht so hoch ist.


Das habe ich mich auch gefragt
 
Zurück
Oben