problem mit sessions
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
angelegt beitrag
aufruf
brechen
code
http
index
kleine funktion
loch
logik
nachtrag
problem
rangliste
session
setzen
sicherheit
sicherheitsvorkehrung
sinnvolle kombination
test
url
weitergeben
-
Hallo liebe Community!
Ich habe ein kleines Problem mit Sessions.
Und zwar:
Ich habe meine index.php, in der ich als erstes eine session mit session_start(); starte. Alles kein Problem.
Nun möchte ich die SessionID in $_SESSION['s_id'] = session_id(); speichern.
Eigentlich dürfte sich die SessionID ja nicht ständig erneuern, richtig?
ich habe zur Sicherheit noch eine kleine Funktion geschrieben:
session_start(); function checkSession() { if(!isset($_COOKIE['session'])) { session_regenerate_id(); setcookie("session", session_id(), time()+60*60); return session_id(); } else { return session_id(); } } $_SESSION['s_id'] = checkSession();
Dadurch wäre die Session für 1 Stunde aktiv und gültig. Danach wird eine neue Session generiert. Das wäre die Logik dahinter...
Ich habe allerdings das Problem, dass mein Cookie zwar gesetzt wird und die session_id() hineingeschrieben wird, aber mit jedem Aufruf der index.php die SessionID erneuert wird.
Also:
1. Aufruf: 5aea38dc4296eb2cfbae552d50b59314 -> Cookie: 5aea38dc4296eb2cfbae552d50b59314
2. Aufruf (F5): 4e840a7e525b4eafa1e32665df7254a1 -> Cookie: 5aea38dc4296eb2cfbae552d50b59314
...
Hoffe ihr wisst was ich meine.
Weiß jemand woran das liegen könnte?
Wenn ich das session_regenerate_id() auskommentiere, hat das keinen Effekt, außer der Cookie ist abgelaufen (ist ja auch logisch ;))
Vielen Dank!
Gruß
Skull
Nachtrag:
Ich habe mal wo gelesen, dass man folgendes verwenden sollte, wenn man mit Session arbeitet um die Sicherheit zu erhöhen:
//Sicherheitsvorkehrungen ini_set('display_errors', 'On'); ini_set('session.cookie_secure', true); ini_set('session.use_cookies' ,1); // sicherlich!! ini_set('session.use_only_cookies',1); // JA! Ohne Cookies geht hier nix!! ini_set('session.use_trans_sid' ,0); // bloss nicht auf 1 setzen
Braucht man das wirklich?
Beitrag geändert: 18.11.2008 19:34:11 von skullsplitter -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
hm... nachdem ich es bei mir probiert habe, geht es bei mir wunderbar...
vllt hast du bei dir cookies ausgeschaltet? das ist ein manko, was deinem script noch die beine brechen kann...
das ist dein problem, deine geblockten cookies
schreib ma folgendes über deinen functions code...
<?PHP setcookie("test"); if(!isset($_COOKIE['test'])) {echo "Du akzeptierst keine Cookies!"; exit;} else {echo "Du akzeptierts Cookies!";} ?>
du wirst merken, das deine cookies asu sind...
und, da du keine cookies akzeptierst, gibt er dir nach deinem code ja auch immer wieder eine neue session...
mfg
Beitrag geändert: 18.11.2008 20:21:52 von ranglisten -
habe soeben geschaut...
benutze den firefox 3. da kann man die aktuellen cookies anschauen...
localhost hat einen eintrag session mit der sessionid...?
was gäbe es denn für eine alternative zu den cookies?
ich speichere die session_id auch in die db, wenn sich jmd erfolreich eingeloggt hat und lösche sie wieder, wenn er sich ausloggt...
gruß
nachtrag:
bei deinem script, kommt zuerst die meldung, dass ich keine benutze und dann kommt, dass ich welche benutze, wenn ich f5 drücke. der cookie wird auch sofort angelegt.
Beitrag geändert: 18.11.2008 20:37:25 von skullsplitter -
hast du ma das scriptteil davor gesetzt?
ich nutz auch ff 3.0.4
und local funkt dein script so wunderbar...
blockiere ich die cookies für meine locale ip, bekomme ich bei jedem f5 drücken eine neue session_id, so wie du es beschrieben hast...
mfg -
Hmh alles klar....
Ja was hätte ich für eine Alternative zu den Cookies?
Die SessionID in eine Session-Varabel zu schreiben erscheint mir nicht sinnvoll ehrlich gesagt...^^
Es geht mir drum, dass wenn Benutzer keine Cookies erlauben, eine alternative da wäre...^^
Beitrag geändert: 18.11.2008 21:58:47 von skullsplitter -
Schau dir das mal an:
http://www.php.net/manual/de/session.idpassing.php
Da wird auch beschrieben, wie man die SID über den Link übergeben kann.
<a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">weiter</a>.
(von dem oben genannten Linkt)
Gruß, Prog -
Hmh.
wenn ich die SID über die URL weitergebe, dann habe ich das Problem, dass Fremde eine Session weiterführen können...
ini_set('session.cookie_secure', true); ini_set('session.use_cookies' ,1); // sicherlich!! ini_set('session.use_only_cookies',1); // JA! Ohne Cookies geht hier nix!! ini_set('session.use_trans_sid' ,0); // bloss nicht auf 1 setzen
mit diesem Code müssen Cookies ja aktiviert sein.
Habe da auch was interessantes auf PHP.net gefunden:
<?php if (!isset($_SESSION['timeout_idle'])) { $_SESSION['timeout_idle'] = time() + MAX_IDLE_TIME; } else { if ($_SESSION['timeout_idle'] < time()) { //destroy session } else { $_SESSION['timeout_idle'] = time() + MAX_IDLE_TIME; } } ?>
Damit könnte man ja rein theoretisch die SessionID über die URL weitergeben. Wenn man die MAX_IDLE_TIME ziemlich nach unten setzt (z.B. 5 Min), hätte man ein ziemliches Sicherheits loch gefüllt.
Der User erhält dann einfach eine neue SessionID, wenn er 5 min inaktiv war.
Sprich er wird bei mir auch ausgeloggt.
Wäre das eine sinnvolle Kombination ohne auf Cookies zurück greifen zu müssen?
Gruß
PS:
Zu was würdet ihr tendieren? Cookies oder SessionID über die URL schicken? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage