SESSION
-
Unix-Tom schrieb:
Man sollte sich aber nicht darauf verlassen.
Deshalb geben ich immer bei der Entwicklung gleich die SID mit an
gallery.php?SID
Einfach ein Templatesystem verwenden, und dort interne links abhängig davon ob der Client Cookies akzeptiert zusammenbauen.
Um herauszufinden ob der User Cookies nimmt, geht man so vor:
Man schaut nach, ob die SID in einem Cookie steht:
wenn nein: in ein Cookie schreiben und SID an die URL anhängen
wenn ja: keine SID an die URL anhängenEine SID in einer URL ist nämlich nicht ganz ideal - denn der User wird die URL vielleicht weitergeben (und dann löscht er die SID nicht raus). Das kann uU zu Sicherheitsproblemen führen (auch wenn PHP da recht gutes Handling hat, aber wenn beide User die selbe IP haben (zB weil sie in der selben Firma sitzen) dann kann PHP auch nicht viel machen).
Deshalb ist es eine gute Idee SIDs wenn möglich in ein Cookie zu schreiben.
-
Dafür gibts doch die Konstante SID:
SID (string)
Konstante, die entweder den Namen und die ID der Session in der Form "name=ID" enthält oder eine leere Zeichenkette, falls die Session-ID in einem entsprechenden Cookie gesetzt wurde.Nur warum kann SID nicht auch leer sein, wenn PHP sowieso (automatisch) die SID an die URL anhängt?
-
so wirklich hab ich jetzt noch nicht verstanden, warum das so wie ichs jetzt mach immer ne neues session aufmacht.
weil als ich mich vor nem jahr damit beschäftigt hatte, da musste ich auch nix übergeben usw. da musste ich einfach session_start() machen, und dann hatte es die selbe session. auch wenn ich ne andre php aufgerufen hab, hatte ich automatisch die selben session variablen...Jojo
-
Das hängt eben davon ab, wie der Server konfiguriert ist - und eben, wie der Browser eingestellt ist.
-
Shade Of Mine schrieb:
Einfach ein Templatesystem verwenden, und dort interne links abhängig davon ob der Client Cookies akzeptiert zusammenbauen.
Um herauszufinden ob der User Cookies nimmt, geht man so vor:
Man schaut nach, ob die SID in einem Cookie steht:
wenn nein: in ein Cookie schreiben und SID an die URL anhängen
wenn ja: keine SID an die URL anhängenEine SID in einer URL ist nämlich nicht ganz ideal - denn der User wird die URL vielleicht weitergeben (und dann löscht er die SID nicht raus). Das kann uU zu Sicherheitsproblemen führen (auch wenn PHP da recht gutes Handling hat, aber wenn beide User die selbe IP haben (zB weil sie in der selben Firma sitzen) dann kann PHP auch nicht viel machen).
Deshalb ist es eine gute Idee SIDs wenn möglich in ein Cookie zu schreiben.
Wenn man Session_start aufruft und es konnte ein Cookie geschrieben werden dann ist SID leer. Somit macht es nichts wenn man die SID beim Programmieren überall anhängt.
Dann ist eben jeder Link Button etc. z.B. weiter.php? Macht ja anicht und funtioniert trotzdem.
Es gibt nur 2 Möglichkeiten wenn Cookies nicht funktionieren. Entweder den Server so konfigurieren das er die SID automatisch anhängt oder eben selbst übergeben. 2teres ist zu bevorzugen da es dann mit jedem Server funktioniert. Ist das gleiche wie mit register_global. Da sollte man auch IMMER alles mit _POST holen und nicht darauf vertrauen das die VAR schon erstellt werden.
Die Session wird ungültig wenn der Browser geschlossen wird. Sie wird dann von System gelöscht. Zumindest auf einem Linuxsystem. Dies dauert zwar je nach einstellung in der Konfig aber etwas Verantwortung muss man auch den USER aufladen.
Und wenn er Cookies deaktiviert dann kennt er sich auch in der Regel aus.Und wie gesagt: ES gibt sonst keine andere Möglichkeit ausßer die SID vielleicht in POST zu übergeben. Das geht aber nur bei bestimmten Aktionen.
-
Hmm, also ich übergeb jetzt die SID in der Url:
print "<form name='next' action='gallery.php?'".session_name()."=".session_id()." method='get'>"
==
<form name='next' action='gallery.php?'PHPSESSID=0ab32856fe85e3227efad1e1b2712ee9 method='get'>
aber ich hab jetzt immer noch ne neue Session...
-
Fällt dir nicht das ' nach dem ? in der URL auf
-
oh binnich blöd....
-
ich war zwar blöd, aber es geht immer noch ned.
ich glaub ich geb auf...falls jemand lust hat zu gucken, warums ned geht, hier mein code:
<?php session_start(); function Show() { $currentIndex = $_SESSION['currentIndex']; $fileList = $_SESSION['fileList']; $file = $fileList[$currentIndex]; $path = $_SESSION['path']; $imagePath = strval($path)."/".strval($file); print "<form name='next' action='gallery.php? ".session_name()."=".session_id()."' method='get'>". "<input type='submit' value='next'>". "<input type='hidden' name='path' value='next'>". "</form>". "<img src= '$imagePath' width='90%' height='90%' border='0' alt=''>"; } if( $_GET[path] == "next" ) { print session_id(); $_SESSION['currentIndex'] += 1; Show(); } else if( $_GET[path] == "previous" ) { print session_id(); $_SESSION['currentIndex'] += 1; Show(); } else { print session_id(); $_SESSION['path'] = $_GET[path]; $fileList = array(); $handle = opendir( $_SESSION[ 'path' ] ); while ($file = readdir($handle) ) { if( $file != "." && $file != ".." ) array_push( $fileList, $file ); } closedir($handle); $_SESSION['currentIndex'] = 0; $_SESSION['lastIndex'] = count( $list ); $_SESSION['fileList'] = $fileList; Show(); } ?>
-
Was macht er denn bisher?
-
ich geb ja in jedem if zweig die session id aus, und die is jedesmal anders.
das erste bild wird richtig angezeigt, da die gallery.php aus ner anderen php aufgerufen wird, und die hidden wariable den richtigen pfad hat.
dann beim click auf next, da wirds falsch, weil die session variablen nicht mehr gespeichert sind, und dadurch der pfad falsch ist. und die session id ist auch ne andre wie beim 1. aufruf...
-
Wenn du dich schon darum kümmerst, die Session-ID zu übergeben, dann musst du sie evtl. auch wieder selber setzen.
session_id($_REQUEST[session_name()]);
-
es geht weder wenn ichs vor session_start() schreib, noch danach.
-
Steht denn in $_REQUEST[session_name()] wenigstens die richtige ID? Falls nicht, stimmt bei der Übergabe schon was nicht
-
wenn ich das printe $_REQUEST[session_name()]
da steht nix drinne
-
Was für eine PHP-Version hast du? und gibt denn session_name() was aus?!
-
Wofür brauchst du session_name
Dies muss vor session_start aufgerufen werden um einen Namen für die Session zu setzen.
Mach einfach folgendes
session_start();
$_SESSION['XY'] = "XY"
ein eURL hängt nicht das an was du machst sondern nur SID
Bedenke aber das SID immer als letztes in einer URL sein muss da SID auch leer sein kann.
-
ZEFIXX,
also ich hab folgendes rausgefunden:
wenn ich so mach:
[php]
print "<form name='next' action='gallery.php?".SID."' method='post'>".
"<input type='submit' value='next'>".
"<input type='hidden' name='path' value='next'>".
"</form>".
[/php]dann krieg ich die richtige SID übergeben und somit auch die richtige session.
print "<form name='next' action='gallery.php?".SID."' method='get'>". "<input type='submit' value='next'>". "<input type='hidden' name='path' value='next'>". "</form>".
so krieg ich meine versteckte variable übergeben, aber nicht die SID...
ich brauch aber beides......
-
Ist ja eigentlich klar denke ich.
Ich weiß jetzt zwar nicht wie HTML das macht wenn die SID leer ist aberSo sieht es wenn die SID nicht leer ist.
gallery.php?PHP_SESSION=sdfsawercsa&path=deinpfad
und so IMHO wenn sie leer ist.
gallery.php??path=deinpfadOb das geht weiß ich nicht. Ich übergebe immer per POST.
-
Deswegen finde ich SID immer etwas ungünstig und bastle mir zwei neue Konstanten (eine mit &SID und eine mit ?SID bzw. beide leer, wenn SID leer ist).
Aber guck dir bei GET doch einfach mal an, wie dein Browser die URL zusammenbastelt... das schön ist doch, dass du das im URL Fenster super sehen kannst.