Hello,
session.use_cookies 1
session.use_only_cookies 0
session.use_trans_sid 1
Für Deinen Fall solltest Du benutzen
session.use_cookies 0
session.use_only_cookies 0
session.use_trans_sid 1
... hab ich nun folgenden (sehr maessig getesteten!) Code. Aber ich poste ihn gleichmal, bevor ich's vergesse ...
[...]
$session_name = null;
// erschoepfende Suche nach dem session-namen, der mit "some-fancy-prefix-" beginnt, gefolgt von
einer uniqid()
Verstehe nicht, was und wofür Du das hier machst.
if(is_array($_POST))
$_POST, $_GET und $_SERVER sind immer Arrays und auch immer vorhanden, wenn man nicht selber daran manipuliert hat oder der Parser beschädigt ist.
{
foreach($_POST as $key => $value)
{
// Suche erfolgreich => Session-Namen uebernehmen
if(strpos($key, 'some-fancy-prefix-') > 0)
if(strpos($key, 'some-fancy-prefix-') !== false) ## !false! steht für "nicht gefunden"
$session_name = $key;
}
}
// Suche nicht erfolgreich => neuen Sessionnamen uebernehmen
if($session_name == null)
$session_name = 'some-fancy-prefix-'.uniqid('');
// Session starten
session_name($session_name);
session_start();
// Session stoppen wenn entsprechendes Signal kommt
if(array_key_exists('logout', $_POST))
{
session_destroy();
unset($_SESSION);
}
PHP bezeichnet seine Sessions i.d.R. mit 'PHPSESSID',
das kann man mit session_name() abfragen und _verändern_.
Dieser Name wird dann auch z.B. für den Cookie, für die Variable in $_POST (im Formular also für die Hidden-Var), für den Parameter in der URi (in allen[?] Links also) benutzt.
Die Datei, die dann angelegt, gesucht, bearbeitet wird, wird i.d.R. mit SESS_<nummer> gekennzeichnet.
Die Nummer ist die hexadezimale Darstellung der Session-ID.
Die Nummer wird von PHP nach einem bestimmten (Zufalls-)Algorithmus ausgewürfelt, und soll angeblich "nicht erratbar" sein. man kann sie mit session_id() abfragen und auch _setzen_
Wenn Du nun die Werte für Sessionname und Session-ID nach Deinem Gutdünken festlegst, _bevor_ Du
session_start() aufrufst, macht PHP alles für Dich.
Es benutzt den festgelegten Sessionnamen und die festgelegte ID, um nach der vermeintlich vorhandenen Sessiondatei zu schauen in session.save_path und wenn die dort nicht vorhanden ist, eine neue unter der Nummer mit der Bezeichnung SESS_<nummer> anzulegen. Der Name spielt hier keine Rolle mehr. Der war nur gut für die Übermittlung der Session-Nummer zwischen Client und Server.
Wenn PHP (gemeint ist immer der Prozess) uf Betriebssystem-Ebene keine Schreib- oder Leserechte für das Verzeichnis, das in session.save_path angeben wurde, hat, dann kracht es. Es gibt dann eine Warning. Wenn PHP keine Berechtigung hat, weil der angegebene Pfad nicht in open_basedir aufgeführt ist (nicht dazu passt), dann kracht es ebenfalls.
Kleiner Ausflug nebenbei:
Wenn man in seiner shared-Hosting-Umgebung seine Session-Dateien im allgemeinen /tmp/-Verzeichnis ablegen lässt, ist man dämlich, da dies meistens scanbar ist (wegen des Garbage Collectors) und die Sessions dann entführbar sind. Wenn wenigstens das R-Recht fürs Verzeichnis entzogen wurde, müsste man sie erraten, um darauf zuzugreifen; das würde wenigstens relative Sicherheit geben.
Wenn Du also in $_POST nachschauen willst, ob eine Session-Kennung von/für PHP angekommen ist, dann
kannst du das mit
if (isset($_POST[$session_name()]))
und kannst dann die Kennung aus dem Arrayelement herauslesen. Das musst Du aber gar nicht, weil PHP das ja selber tut, und diese verwendet, wenn Du nicht mit session_id() selber eine eigene festgelegt hast.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)