Session ID in URL (SID)
cma
- php
0 wahsaga0 cma
0 Andreas-Lindig0 cma0 Andreas-Lindig0 cma
0 Siechfred0 cm
0 Sven Rautenberg
0 Siramon0 cma
Hallo allerseits,
ich habe eine Verständnisproblem bzgl. Sessions mit PHP.
Wenn ich in einem PHP-Script mittels session_start() eine Session starte, und der Client keine Cookies akzeptiert, muß ich, wenn ich es richtig verstanden habe, die jeweilige SessionID (SID) per URL übergeben.
Das sieht dann bspw so aus :
echo "<a href='seite2.php?" . SID . "'>Seite 2</a>";
In der URL erscheint dann z.B. folgendes:
http://www.meinserver.de/seite2.php?PHPSESSID=1a0cfac178c3ef8dc241754b830c5601
Nun ist es mir sehr wichtig, dass jede Seite meines Projektes _bookmarkbar_ ist.
Wenn also jemand von der URL oben ein Lesezeichen erstellt und dieses im ungünstigsten Fall noch einem Bekannten mailt (schau Dir das mal an, wie interessant?!), ist es dann nicht theoretisch möglich, das zwei Besucher gleichzeitig, mit der gleichen SessionID auf meine Seite zugreifen?
Ich hoffe, mein Problem ist einigermaßen transparent geworden.
Wenn mir jemand diesbezüglich helfen könnte, wäre ich sehr dankbar.
Leider konnte ich über dieses Problem, sofern es eines ist, nichts finden. Ich bin also natürlich auch für Links dankbar.
Vielen Dank für Eure Aufmerksamkeit.
Viele Grüße,
cma
hi,
Wenn also jemand von der URL oben ein Lesezeichen erstellt und dieses im ungünstigsten Fall noch einem Bekannten mailt (schau Dir das mal an, wie interessant?!), ist es dann nicht theoretisch möglich, das zwei Besucher gleichzeitig, mit der gleichen SessionID auf meine Seite zugreifen?
ja, durchaus.
wenn da sicherheitsrelevante gründe dagegen sprechen - dann verwende sessions nicht derart.
gruß,
wahsaga
Hallo wahsaga,
danke für die Antwort.
wenn da sicherheitsrelevante gründe dagegen sprechen - dann verwende sessions nicht derart.
Meine Frage zielte ja aber eigentlich in diese Richtung.
Welcherart verwende ich denn die Session am günstigsten?
Ich benötige die Session und möchte mich nicht auf clientseitig aktivierte Cookies verlassen.
Kann man die SID nicht _POST-artig_ übertragen, so dass sie nicht in der URL auftaucht?
Im Grunde geht es mir primär darum, ein Array von einer Seite auf alle verlinkten Seiten zu übergeben.
Wenn ich dies mittels serialize(), etc. und nicht per Session mache, stehe ich doch früher oder später wieder vor dem gleichen Problem, oder?
Danke,
cma
Hallo cma.
Kann man die SID nicht _POST-artig_ übertragen, so dass sie nicht in der URL auftaucht?
Unter Beachtung dieses Threads: [pref:t=83916&m=490851] und der Tipps aus dem Selfchat sieht es bei mir jetzt so aus:
--- Anfang des PHP-Scripts ---
<?php
ini_set('session.use_cookies', 0);
ini_set('session.use_trans_sid', 0);
if(isset($_POST['SID']) ) {
session_id($_POST['SID']);
}
session_start();
--- HTML-Code und ein Formular mit method="POST" und: ---
print "<input type='hidden' name='SID' value='".session_id()."'>\r\n";
--- Der Rest ---
Das funktioniert wie gewünscht, keine Session-ID an den URLs, die Übergabe erfolgt über das versteckte Eingabefeld.
Im Grunde geht es mir primär darum, ein Array von einer Seite auf alle verlinkten Seiten zu übergeben.
Ähm, erfordert dieses Array Sessions, weil es sessionspezifische Daten enthält, oder bleibt sein einmal definierter Inhalt erhalten? Falls nicht, stellt sich die Frage, was gegen die Weitergabe des serialisierten Arrays durch ein verstecktes Eingabefeld spricht, Sessions bräuchtest du dann m.E. gar nicht.
Freundschaft!
Siechfred
Moin!
Das funktioniert wie gewünscht, keine Session-ID an den URLs, die Übergabe erfolgt über das versteckte Eingabefeld.
Aber nur, wenn du SÄMTLICHE neuen Seiten aufrufst, indem du das Formular abschickst.
Suchmaschinen werden deine Site dann übrigens nicht indizieren - denn die schicken keine Formulare ab.
Ähm, erfordert dieses Array Sessions, weil es sessionspezifische Daten enthält, oder bleibt sein einmal definierter Inhalt erhalten? Falls nicht, stellt sich die Frage, was gegen die Weitergabe des serialisierten Arrays durch ein verstecktes Eingabefeld spricht, Sessions bräuchtest du dann m.E. gar nicht.
Daten, die von einer Seite zur nächsten weitergegeben werden, weil sie aufgrund individueller Userentscheidungen entstehen, sind Sessiondaten. Die in der URL serialisiert mitzuschleppen ist die schlechtere Entscheidung.
Daten, die allgemein für alle Besucher identisch "mitgeschleppt" werden sollen, gehören natürlich nicht in eine Session, sondern sollten Bestandteil des URL-Konzeptes sein.
- Sven Rautenberg
Hallo Sven,
Daten, die von einer Seite zur nächsten weitergegeben werden, weil sie aufgrund individueller Userentscheidungen entstehen, sind Sessiondaten. Die in der URL serialisiert mitzuschleppen ist die schlechtere Entscheidung.
aber was ist z.B. mit einer Suche? Oft wird hier der Ergebnislink einer Google- oder Forums-suche verlinkt. Das war doch eine individuelle Userentscheidung.
Gruß, Andreas
Moin!
Daten, die von einer Seite zur nächsten weitergegeben werden, weil sie aufgrund individueller Userentscheidungen entstehen, sind Sessiondaten. Die in der URL serialisiert mitzuschleppen ist die schlechtere Entscheidung.
aber was ist z.B. mit einer Suche? Oft wird hier der Ergebnislink einer Google- oder Forums-suche verlinkt. Das war doch eine individuelle Userentscheidung.
Eine Suche wird nicht ewig mitgeschleppt, sondern hat üblicherweise eine Ergebnisseite. Schlimmstenfalls mehrere zum Blättern.
Ok, meine Definition ist vielleicht noch erweiterungsfähig. :)
- Sven Rautenberg
Hallo Sven.
Das funktioniert wie gewünscht, keine Session-ID an den URLs, die Übergabe erfolgt über das versteckte Eingabefeld.
Aber nur, wenn du SÄMTLICHE neuen Seiten aufrufst, indem du das Formular abschickst.
Natürlich hast du Recht, aber es ist bei mir im Original ein Affenformular und sollte nur zur Verdeutlichung des Prinzips dienen.
Suchmaschinen werden deine Site dann übrigens nicht indizieren - denn die schicken keine Formulare ab.
Die Seite mit dem Formular schon, und da es ein Affenformular ist ... ;-)
Daten, die von einer Seite zur nächsten weitergegeben werden, weil sie aufgrund individueller Userentscheidungen entstehen, sind Sessiondaten. Die in der URL serialisiert mitzuschleppen ist die schlechtere Entscheidung. [...]
Jaja, du kannst das halt besser ausdrücken, aber ich glaube, wir meinten das Gleiche :-)
Freundschaft!
Siechfred
Hallo cma,
Wenn also jemand von der URL oben ein Lesezeichen erstellt und dieses im ungünstigsten Fall noch einem Bekannten mailt (schau Dir das mal an, wie interessant?!), ist es dann nicht theoretisch möglich, das zwei Besucher gleichzeitig, mit der gleichen SessionID auf meine Seite zugreifen?
wenn sie im gleichen Moment kommen ja, aber das ist ja eher unwahrscheinlich. Ich sehe da noch ein ganz anderes Problem, weshalb ich gerade in meinem aktuellen Projekt sämtliche Sessions wieder rausschmeiße: Wenn das Array zur Funktionstüchtigkeit der Seite gebraucht wird und auf irgenwelchen Vorseiten kreiert wurde. Nun kommt der Empänger des Links und ruft eine Session auf, die es mit dieser Nummer nicht mehr gibt, sie wird neu erstellt und ist natürlich leer. Dann gibt es auch das Array nicht. Ich übergebe deshalb jetzt alles per get oder post und habe so eindeutige Seiten, die man immer verlinken kann.
Natürlich kann man so die individuelle Userentscheidung - wie Sven schrieb - nicht ausblenden.
Gruß, Andreas
Hallo Andreas,
danke für die Antwort.
Ich sehe da noch ein ganz anderes Problem, weshalb ich gerade in meinem aktuellen Projekt sämtliche Sessions wieder rausschmeiße: Wenn das Array zur Funktionstüchtigkeit der Seite gebraucht wird und auf irgenwelchen Vorseiten kreiert wurde. Nun kommt der Empänger des Links und ruft eine Session auf, die es mit dieser Nummer nicht mehr gibt, sie wird neu erstellt und ist natürlich leer. Dann gibt es auch das Array nicht. Ich übergebe deshalb jetzt alles per get oder post und habe so eindeutige Seiten, die man immer verlinken kann.
Das Problem sehe und habe ich auch. Da ich das Array für eine Navigation benutzen möchte, ist diese natürlich dahin, wenn jemand "quer einsteigen" sollte. Als Alternative fällt mir dazu aber nur ein, die gesamte Seitenstruktur vorher in einem Array oder einer Datenbank abzubilden und dann entsprechend zu reagieren. Ich habe keine Ahnung, wie ich das mit GET oder POST lösen sollte. Hast Du eine Idee?
Da meine Seitenstruktur aber sehr umfangreich ist (5 Sprachen, à ca. 80 Seiten) und man von verschiedenen Stellen auf die gleiche Seite gelangen können soll, erscheint mir das als etwas sehr aufwändig.
Wahrscheinlich komm ich aber nicht drum rum (stöhn), was meinst Du?
Gruß,
cma
Hast Du eine Idee?
ich habe noch nicht ganz verstanden, wozu diese History dienen soll. Die hat der User doch im Brauser auch. Ich habe auch bei einigen Unterseiten eine Art History, die man nach Svens Argumenten wohl auch tatsächlich als Session speichern könnte - ich habs per Übergabe gemacht. Aber der Sinn ist nicht, die vorige Seite wiederzufinden, sondern sie so wiederherzustellen, wie sie war (bestimmte Auswahlen).
Wozu dient die History bei Dir?
Gruß, Andreas
Hallo Andreas,
Wozu dient die History bei Dir?
Es ist schon so, dass meine History nichts Lebensnotwendiges ist. Aber ein nettes Gimmick wäre es schon.
Vor einiger Zeit habe ich eine "Anwendung" erstellt, die aus sehr vielen Inhaltsseiten in verschiedenen Sprachen besteht und auf einem Terminal mit Touchscreen gezeigt wird. Das ganze basiert auf HTML, bzw. DHTML und Javascript.
Die Inhalte werden im Vollbild, komplett ohne Browserkomponenten angezeigt. Somit gibt es auch keine Next- und Backknöpfe. Also hab ich eine Navigationsmöglichkeit eingebaut (nach dem Muster: Home -> Seite 1 -> Seite 2 -> ...). Die Titel sind anklickbar, also kann man sich innerhalb der Seiten bewegen.
Die Navigation schreibe ich mit Javascript in ein DIV, was allerdings nicht jeder Browser mitmacht (Opera läßt grüßen).
Da es die ganze Sache demnächst online geben soll, wollte ich gerne die Navigation beibehalten, eher aus Designtechnischen Gründen.
Natürlich hat der Anwender im Onlinefall wieder Browserknöpfe, allerdings war die Navigationshilfe bei der tiefen Verschachtelung aus Übersichtsgründen durchaus hilfreich.
So suche ich also nach Möglichkeiten, diese Navigationshilfe "herüberzuretten". Ich habe auch schon einmal versucht, die gesamte Seitenstruktur in einer Datenbank abzubilden, und diese dann mittels rekursiver Funktion anzuzeigen. Allerdings ist der Aufwand (Struktur in DB) sehr groß.
Ich hätte große Lust, an dem vorhandenen Aufbau möglichst wenig zu ändern. In diesem Fall wär meine "History" hilfreich.
So, das war wahrscheinlich _zu_ ausführlich, aber Du hattest ja gefragt!
Gruß,
cma
mir erscheint das etwas durcheinander. Eine Unterscheidung ist mir nämlich nicht klar:
1. "Seitenstruktur"
2. "History"
Wenn Du eine Navigation mit aufgeklappten Menüs und dem aktuellen Standort darstellen willst, brauchst Du keinerlei Übergaben oder Session. Wenn Du die Reihenfolge darstellen willst in der der User die Seiten besucht hat, brauchst Du die Übergabe.
Gruß, Andreas
Hallo,
ok:
Es geht um die Reihenfolge, in der der User die Seiten besucht hat.
Wenn sich jemand durch die Seiten klickt, wächst die "History" mit, der Titel der Seite wird als Link angezeigt, beim Klick führt er auf die entsprehende vorherige Seite.
Im Grunde von der Funktionalität nichts, was nicht auch der back-knopf des Browsers erledigen kann.
Wenn sich der User aber bspw. schon zehn Seiten "tief" weitergeklickt hat, hat er mit meiner "History" die Möglichkeit, z.B. direkt fünf Seiten zurückzugehen. Darüber hinaus wird ihm angezeigt, um welche Themen es sich bei den zuvor besuchten Seiten handelt. Das macht die Inhaltsschlacht meiner Meinung nach übersichtlicher.
Wenn ich eine "Navigation mit aufgeklappten Menüs" erstellen will, muß ich vielleicht nichts übergeben, aber ich muß die "Struktur" der Seiten doch vorher irgendwo abbilden (z.B. Datenbank), oder denke ich falsch?
Wie würdest Du das angehen?
Kompliment, Du bist ganz schön geduldig.
Gruß,
cma
Kompliment, Du bist ganz schön geduldig.
immer schön Honig um den (nicht vorhandenen) Bart - so mach ich das auch immer, wenn ich mehr Antworten haben will ;-)
Wenn sich der User aber bspw. schon zehn Seiten "tief" weitergeklickt hat, hat er mit meiner "History" die Möglichkeit, z.B. direkt fünf Seiten zurückzugehen.
das kann sehr praktisch sein. Will ich an einer Stelle auch machen. Die Übergabe ist ja simpel, weil das Array eindimensional ist. Aber ich habe da so einen Gedanken: man sollte die angeklickten Seiten nicht einfach addieren - das macht die Brauserhistory besser. Wichtig ist, daß der Strang in die Tiefe stringent bleibt. Also z.B.:
Deine Struktur:
Seite1
|
+-Seite2
|
+-Seite3
Dein User klickt diese Reihenfolge:
Seite1, Seite2, Seite3, Seite2, Seite3
dann steht in der Brauserhistory: Seite1->Seite2->Seite3->Seite2->Seite3
in Deiner Navigation sollte aber stehen:
Seite1->Seite2->Seite3
Wenn ich eine "Navigation mit aufgeklappten Menüs" erstellen will, muß ich vielleicht nichts übergeben, aber ich muß die "Struktur" der Seiten doch vorher irgendwo abbilden (z.B. Datenbank), oder denke ich falsch?
nö, ist richtig.
Wie würdest Du das angehen?
z.B. so:
<?php
#Variablen
//Pfad zum obersten Verzeichnis des Projekts
$stammpfad = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
//Pfad vom Stammverzeichnis zur aktuellen Seite, sie uebergibt dieses Array an dieses Menuescript
//jede Seite beinhaltet also eine Variable "$ich", in der steht der genaue Pfad dorthin
$restpfad = array('obst','kernobst','Birnen');
//Abbildung der Sitestruktur, am besten mit PHP erzeugen
$navi = array();
$navi['getraenke'] = array();
$navi['getraenke']['Milch'] = 'Milch.html';
$navi['getraenke']['Bier'] = 'Bier.html';
$navi['getraenke']['Saft'] = 'Saft.html';
$navi['obst'] = array();
$navi['obst']['kernobst'] = array();
$navi['obst']['kernobst']['Aepfel'] = 'Aepfel.htm';
$navi['obst']['kernobst']['Birnen'] = 'Birnen.php';
$navi['obst']['beeren'] = array();
$navi['obst']['beeren']['Erdbeeren'] = 'Erdb.html';
$navi['fleisch'] = array();
$navi['fleisch']['Rind'] = 'Rind.html';
$navi['fleisch']['Schwein'] = 'Schwein.html';
function navi_ausgeben($navi, $restpfad, $pfad)
{
//fuer jede tiefere Verzeichnisebene mehr Einzug (kann man auch mit Listen machen)
foreach($pfad as $irgendwas)
$einzug .= ' ';
//gesamte Site auf oberster Ebene durchrattern
foreach($navi as $kategorie=>$element)
{
//Array: das Element ist ein Verzeichnis
if(is_array($element))
{
//Verzeichnis lieg auf dem Pfad zur aktuell markierten Seite
if($restpfad[0]==$kategorie)
{
//Verzeichnis ohne Link ausgeben
echo $einzug.'<b>'.$kategorie.'</b><br>';
//Pfad _bis_ hierher merken und Pfad _von_ hier bis zur Seite um einen Schritt kuerzen
$pfad[] = array_shift($restpfad);
//Site auf aktuell tieferer Ebene erneut durchrattern
navi_ausgeben($navi[$pfad[count($pfad)-1]], $restpfad, $pfad);
//danach Pfade wieder rueckgaengig machen (Rekursion springt eine Verzeichnisebene hoeher)
array_unshift($restpfad, array_pop($pfad));
}
//Verzeichnis liegt nicht auf dem Pfad zur aktuell markierten Seite: als Link ausgeben
else
{
echo $einzug.'<b>'.'<a href="'.join('/', $pfad).'/'.$kategorie.'/">'.$kategorie.'</b></a><br>';
}
}
//kein Array: das Element ist eine Seite
else
{
if($restpfad[0] == $kategorie)
//Element ist die aktuell markierte Seite
echo $einzug.$kategorie.'<br>';
else
//Element ist eine andere Seite im gleichen Verzeichnis
echo $einzug.'<a href="'.join('/', $pfad).'/'.$element.'">'.$kategorie.'</a><br>';
}
}
}
navi_ausgeben($navi, $restpfad, array($stammpfad))
?>
Wir spieln heute mal getPHP ;-)
Ich hab das jetzt mal fertiggebastelt, weil ich demnächst auch sowas brauche :-)
Gruß, Andreas
Hallo,
immer schön Honig um den (nicht vorhandenen) Bart - so mach ich das auch immer, wenn ich mehr Antworten haben will ;-)
Ich habe auf nichts spekuliert, ich wollte nur nett sein. Ist aber nicht so einfach, warum glauben immer alle, dass man damit einen persönlichen Vorteil herausschinden will.
Also gut: Wird ja auch Zeit, dass Du endlich antwortest ;-) (Vorsicht: Ironie!)
Dein User klickt diese Reihenfolge:
Seite1, Seite2, Seite3, Seite2, Seite3dann steht in der Brauserhistory: Seite1->Seite2->Seite3->Seite2->Seite3
in Deiner Navigation sollte aber stehen:
Seite1->Seite2->Seite3
Ich habe es bisher so gemacht. Wenn der User eine Seite aufruft, die schon in der Navigation steht, dann suche ich im Array, an welcher Stelle dieser Eintrag steht und kürze das Array bis dahin. So komme ich zur Navigation "Seite1->Seite2->Seite3".
Das ist bestimmt nicht die eleganteste Lösung, aber für meinen Fall hat es gereicht.
Ich benutze übrigens ein mehrdimensionales Array für Seitentitel und Href, bzw. in Javascript hatte ich mir in (Pseudo?-)Objekt gebastelt.
Dein Script gefällt mir gut. Vom Prinzip her habe ich mir auch schon mal so etwas zusammengebastelt. Mein aktuelles Problem ist nur, dass ich mit ca. 80 - 100 Inhaltsseiten mal fünf Sprachen zu tun habe. Die Gliederung erfolgt sehr fein, so dass ich viele dieser Navigationspunkte benötige. Diese Menge an Inhalt in einem Array abzubilden, läßt dieses sehr groß, und meiner Meinumg nach sehr unhandlich werden.
Deshalb hab ich mal einen Strang in einer Datenbank abgebildet, was aber mit allen Bezügen untereinander sehr umfangreich wird, insbesondere, wenn ich alle Inhalte einpflegen will. Ich nehme aber an, das ich nicht umhin komme, diese Tabellen zu erstellen.
Damals hatte ich (idiotischerweise) noch nicht an eine eventuelle Onlineversion gedacht, sonst hätte ich gleich alle Inhalte, inkl. Texte in einer DB vorgehalten. Dann hätte ich mir alles schön dynamisch zusammenbasteln lassen können. Im Nachhinein die ganzen Inhalte in eine DB zu übertragen wäre/ist echte Strafarbeit.
Danke für Deine Antwort, Dein Script und Deine Mühe, auch auf die Gefahr hin, Dir zu schmeicheln.
Viele Grüße,
cma
Ich habe auf nichts spekuliert, ich wollte nur nett sein...
war nicht böse gemeint. Ich vertrage keine guten Worte ;-)
Diese Menge an Inhalt in einem Array abzubilden, läßt dieses sehr groß, und meiner Meinumg nach sehr unhandlich werden.
kann sein. In jedem Fall würde ich dieses Strukturabbild aber dynamisch generieren und nicht etwa von Hand schreiben, also rekursiv die Verzeichnisse auslesen und kucken, was da _tatsächlich_ drin liegt und nicht, was da drin liegen _sollte_. Sonst kriegst Du früher oder später Ärger bei Änderungen. Und ob dann nun ein Array oder eine DB schneller oder praktischer ist, kann ich nicht sagen. Nur soviel: Wenn man das in der DB mit Rückbezügen speichert, also:
Sorte | Parent | Link
----------------------------
Birnen kernobst /kernobst/birnen.php
kernobst obst /kernobst/
...
dann muß man beim Auslesen da auch wieder ein Array draus basteln, um das in so einer rekursiven Schleife ausgeben zu können. Fällt mir jedenfalls auf Anhieb nichts anderes ein. Du weißt ja schließlich nie, wie tief die Verzeichnisse werden, oder ist das bei Dir unveränderbar festgelegt?
Im Nachhinein die ganzen Inhalte in eine DB zu übertragen wäre/ist echte Strafarbeit.
auch das kannst Du mit einem Script tun. Mußte ich kürzlich auch, als ich mein Forum von Dateisystem auf DB umgestellt habe. Da habe ich alle Dateien automatisch ausgelesen und in die DB schreiben lassen.
Gruß, Andreas
Hallo Andreas,
mir fällt es wie Schuppen von den Augen (oder wie immer das heißt)!
Ich Hirni kam noch überhaupt nicht auf die Idee, mittels Script das Dateisystem auszulesen und das Ergebnis einer Datenbank oder einem Array zu übergeben. Das ist ja zudem noch furchtbar flexibel.
Toll, große Freude. Das werde ich gleich mal angehen.
Vielen Dank für diese Anregung, manchmal steht man sich selbst erschreckend im Wege.
Viele Grüße,
cma
mir fällt es wie Schuppen von den Augen (oder wie immer das heißt)!
es heißt "wie Schuppen aus den Haaren" ;-)
Gruß, Andreas
Moin!
Im Grunde von der Funktionalität nichts, was nicht auch der back-knopf des Browsers erledigen kann.
Wenn sich der User aber bspw. schon zehn Seiten "tief" weitergeklickt hat, hat er mit meiner "History" die Möglichkeit, z.B. direkt fünf Seiten zurückzugehen.
Alle Back-Knöpfe von mir bekannten Browsern haben die Funktioalität, nicht nur genau eine Seite zurückzugehen, sondern bieten bei Klick auf den kleinen "Drop-Down-Pfeil" immer auch die Möglichkeit, sich eine Liste der letzten X besuchten Seiten anzeigen zu lassen, um damit dann mehrere Schritte zurückzugehen.
Darüber hinaus wird ihm angezeigt, um welche Themen es sich bei den zuvor besuchten Seiten handelt. Das macht die Inhaltsschlacht meiner Meinung nach übersichtlicher.
Wenn das Title-Tag ordentlich gefüllt ist, wird das bei der Browser-geführten History auch getan.
Wenn ich eine "Navigation mit aufgeklappten Menüs" erstellen will, muß ich vielleicht nichts übergeben, aber ich muß die "Struktur" der Seiten doch vorher irgendwo abbilden (z.B. Datenbank), oder denke ich falsch?
Von "müssen" kann keine Rede sein, das hängt alles von der Art der Realisierung ab. Meine Navigationen kommen eigentlich nur dann aus einer DB, wenn das verwendete CMS das so vorsieht. Statische oder zumindest generierte Navigationen sind ebenso denkbar.
- Sven Rautenberg
Hallo,
Alle Back-Knöpfe von mir bekannten Browsern haben die Funktioalität, nicht nur genau eine Seite zurückzugehen, sondern bieten bei Klick auf den kleinen "Drop-Down-Pfeil" immer auch die Möglichkeit, sich eine Liste der letzten X besuchten Seiten anzeigen zu lassen, um damit dann mehrere Schritte zurückzugehen.
Ja, das stimmt, jedoch halte ich die selbstgebastelte History für übersichtlicher, da die Titel auf jeder Seite immer sichtbar sind.
Aber natürlich ist sie technisch gesehen überflüssig.
Statische oder zumindest generierte Navigationen sind ebenso denkbar.
Tut mir ja sehr leid, aber was meist Du mit einer "generierten Navigation"?
Redest/schreibst Du vom auslesen des Dateisystems? Davon hat Andreas-Lindig nämlich gerade geschrieben. Das ist eine Option, an die ich noch nicht einmal gedacht habe und die ich nun weiterverfolgen werde.
Danke.
Gruß,
cma
Moin!
wenn sie im gleichen Moment kommen ja, aber das ist ja eher unwahrscheinlich.
Warum gerade im gleichen Moment? Zwei gleichzeitige Requests haben immer irgendwas verschiedenes - und sei es nur die Prozess-ID des bearbeitenden Webservers. :) Da würde ich definitiv keine Probleme sehen.
Abgesehen davon gibt es keine Gleichzeitigkeit. :)
- Sven Rautenberg
Abgesehen davon gibt es keine Gleichzeitigkeit. :)
Ich meinte das nicht so auf die Millisekunde, sondern: im aktuellen Zeitraum der Session. Also die Session besteht z.B. 15 Minuten. Nach 7 Minuten schickt User A den Link an User B, User B geht sofort auf die Seite und ab Minute 8 greifen User A und User B wechselseitig auf die Session zu. Die ändern sich doch immer gegenseitig die Daten.
Gruß, Andreas
Moin!
Abgesehen davon gibt es keine Gleichzeitigkeit. :)
Ich meinte das nicht so auf die Millisekunde, sondern: im aktuellen Zeitraum der Session. Also die Session besteht z.B. 15 Minuten. Nach 7 Minuten schickt User A den Link an User B, User B geht sofort auf die Seite und ab Minute 8 greifen User A und User B wechselseitig auf die Session zu. Die ändern sich doch immer gegenseitig die Daten.
Richtig. Und deshalb sollte cma nur Cookies als SID-Übermittler einsetzen und sie nicht in die URL hineinnehmen, weil es ganz offensichtlich nur um ein verzichtbares Detailfeature in der Navigation geht.
- Sven Rautenberg
Hallo,
Richtig. Und deshalb sollte cma nur Cookies als SID-Übermittler einsetzen und sie nicht in die URL hineinnehmen, weil es ganz offensichtlich nur um ein verzichtbares Detailfeature in der Navigation geht.
Und so werde ich es auch machen. Es war mir nur nicht klar, dass ich aus technischen Gründen darauf verzichten _muss_.
Jetzt weiß ich es.
Danke für Eure Mühe.
Viele Grüße,
cma
Hallo Siechfred und Sven Rautenberg,
danke für Eure Antworten!
@ Siechfred
Der Threadlink funktioniert bei mir leider nicht, mglw. deshalb klemmt's bei mir noch ein bißchen.
--- HTML-Code und ein Formular mit method="POST" und: ---
print "<input type='hidden' name='SID' value='".session_id()."'>\r\n";
--- Der Rest ---
Ich verstehe es noch nicht so recht. Das "print" sendet doch nicht das Formular ab, oder?
Ich möchte über "normale" Links (<a href='#'>link</a>) die SID übertragen, also nicht per Submit-Knopf eines Formulars. Ich weiß jetzt nicht, ob mir durch den fehlenden Threadlink einige Informationen fehlen, oder ob mein Problem anders gelagert ist.
@ Siechfred und Sven Rautenberg
Das Array "schleppe" ich "mit", um eine Navigation zu erstellen.
D.h. mit jeder aufgerufenen Seite "wächst" die History. (Home / Seite1 / Seite2 / ...). Die einzelnen Titel wiederum sind anklickbar und führen beim Klick (zurück) auf die entprechende Seite.
Mittlerweile hab ich mich mal an einer serialize() - Version versucht. Ich benutze serialize() und dann base64_encode(), bzw. andersrum. Bisher funktioniert alles ganz gut, nur die URL wird sehr schnell sehr lang. Und das schon bei einem vergleichsweise "kleinen" Array.
Daten, die von einer Seite zur nächsten weitergegeben werden, weil sie aufgrund individueller Userentscheidungen entstehen, sind Sessiondaten. Die in der URL serialisiert mitzuschleppen ist die schlechtere Entscheidung.
Das verstehe ich so, dass eine Session für mich der richtige Ansatz ist!?
Die Navigation innerhalb der Seitenstruktur kann man ja als "individuelle Userentscheidung" ansehen, oder?
Vielen Dank ud viele Grüße,
cma
nur die URL wird sehr schnell sehr lang. Und das schon bei einem vergleichsweise "kleinen" Array.
das kann man leicht umgehen, indem man sich selbst eine Serialisierungsfunktion schreibt, die keine Sonderzeichen produziert. PHP-serialize produziert endlosen Müll von { und : und das wird dann alles in jeweils drei Zeichen umgewandelt. Ich habe mir eine Funktion geschrieben und die Produziert einen query-String, der um den Faktor 9,5 kleiner ist als Deiner. Übergibt übrigens auch ein Array.
Gruß, Andreas
Hallo Andreas,
mann, bist Du schnell, da komme ich ja kaum mit dem Schreiben hinterher.
Ich habe mir eine Funktion geschrieben und die Produziert einen query-String, der um den Faktor 9,5 kleiner ist als Deiner. Übergibt übrigens auch ein Array.
Worauf basiert denn Deine Serialisierungsfunktion?
Kannst / willst Du mir diesbezgl. einen Tipp geben? Das klingt nämlich gut.
Gruß und danke,
cma
Hallo cma.
Ich verstehe es noch nicht so recht. Das "print" sendet doch nicht das Formular ab, oder?
Nein, das gibt nur eine HTML-Zeile aus (print ist hier als PHP-Befehl gedacht).
Ich möchte über "normale" Links (<a href='#'>link</a>) die SID übertragen, also nicht per Submit-Knopf eines Formulars. Ich weiß jetzt nicht, ob mir durch den fehlenden Threadlink einige Informationen fehlen, oder ob mein Problem anders gelagert ist.
Na, das hättest du gleich sagen sollen :-)
Wenn du es als _Link_ machen willst, kommt POST und damit die versteckte Übergabe von Parametern nicht in Frage, ein Link mit angehängten Parametern ist quasi GET. Die Methodenwahl POST/GET hast du in dem Fall nicht, dafür brauchst du ein Formular.
Freundschaft!
Siechfred
Hallo Siechfred,
Na, das hättest du gleich sagen sollen :-)
Wenn du es als _Link_ machen willst, kommt POST und damit die versteckte Übergabe von Parametern nicht in Frage, ein Link mit angehängten Parametern ist quasi GET. Die Methodenwahl POST/GET hast du in dem Fall nicht, dafür brauchst du ein Formular.
Ja, tut mir leid, dass ich per Link übergeben will hatte ich nicht erwähnt.
Danke für Deine Mühe.
Gruß,
cma
Moin!
Ich verstehe es noch nicht so recht. Das "print" sendet doch nicht das Formular ab, oder?
Nein, der gibt das Formular nur aus. Aber du darfst mir glauben, dass Formulare für dich keine Rettung sind. Die machen alles nur 2000% komplizierter.
Ich möchte über "normale" Links (<a href='#'>link</a>) die SID übertragen, also nicht per Submit-Knopf eines Formulars.
Damit fallen Formulare für dich flach.
Das Array "schleppe" ich "mit", um eine Navigation zu erstellen.
D.h. mit jeder aufgerufenen Seite "wächst" die History. (Home / Seite1 / Seite2 / ...). Die einzelnen Titel wiederum sind anklickbar und führen beim Klick (zurück) auf die entprechende Seite.
Da diese History eine ziemlich simple Sache ist, auf die man auch verzichten kann (bedenke bitte, dass man auf dieselbe Weise auch die Position im Menübaum visualisiert - der Benutzer könnte also verwirrt sein), solltest du ausschließlich auf Cookies setzen, und bei Abwesenheit derselben dann einfach keine History ausgeben.
Die ordentliche Navigation darf sowieso nicht auf Sessions basieren, weil Google sonst deine Seite nicht indizieren kann.
Mittlerweile hab ich mich mal an einer serialize() - Version versucht. Ich benutze serialize() und dann base64_encode(), bzw. andersrum. Bisher funktioniert alles ganz gut, nur die URL wird sehr schnell sehr lang. Und das schon bei einem vergleichsweise "kleinen" Array.
Das ist schlecht. Lange URLs sind irgendwann auch mal _zu_ lang (obwohl es keine definierte Grenze in irgendeiner RFC gibt, gibts doch technische Grenzen in den Programmen).
Daten, die von einer Seite zur nächsten weitergegeben werden, weil sie aufgrund individueller Userentscheidungen entstehen, sind Sessiondaten. Die in der URL serialisiert mitzuschleppen ist die schlechtere Entscheidung.
Das verstehe ich so, dass eine Session für mich der richtige Ansatz ist!?
Für die Art von History, die dir vorschwebt, auf jeden Fall.
- Sven Rautenberg
Hallo Forum,
Wenn also jemand von der URL oben ein Lesezeichen erstellt und dieses im ungünstigsten Fall noch einem Bekannten mailt (schau Dir das mal an, wie interessant?!), ist es dann nicht theoretisch möglich, das zwei Besucher gleichzeitig, mit der gleichen SessionID auf meine Seite zugreifen?
Das ist theoretisch möglich. Schau dir doch mal meine Ausführungen zum Thema Validität einer Session an, vielleicht gibt dir das ein paar Hinweise wie du deine PHP-Session sicherer gestalten kannst: [pref:t=84104&m=492715]
Grüsse
Siramon,
ja der Penner aus Nr. 14
Hallo Siramon,
Wenn also jemand von der URL oben ein Lesezeichen erstellt und dieses im ungünstigsten Fall noch einem Bekannten mailt (schau Dir das mal an, wie interessant?!), ist es dann nicht theoretisch möglich, das zwei Besucher gleichzeitig, mit der gleichen SessionID auf meine Seite zugreifen?
Das ist theoretisch möglich. Schau dir doch mal meine Ausführungen zum Thema Validität einer Session an, vielleicht gibt dir das ein paar Hinweise wie du deine PHP-Session sicherer gestalten kannst: [pref:t=84104&m=492715]
Das klingt interessant. Wenn ich es auch noch nicht vollständig begriffen habe. Aber ich arbeite dran.
Danke.
Gruß,
cma