2009-04-15 6 views

Antwort

8

session_id() kehrt t Die Sitzungs-ID für die aktuelle Sitzung oder die leere Zeichenfolge (""), wenn keine aktuelle Sitzung vorhanden ist (keine aktuelle Sitzungs-ID vorhanden).

http://de.php.net/manual/en/function.session-id.php

aber das sagt Ihnen, nur wenn eine Sitzung aktiv ist oder nicht.

die meiste Zeit, ich rufe nur session_start(); am Anfang jedes Skripts (auch wenn der Benutzer nicht angemeldet ist). Bei der Anmeldung setze ich $_SESSION['user'] mit der Benutzer-ID oder einem Benutzerobjekt. beim Ausloggen, ich nur unset($_SESSION['user']);. durch Überprüfung empty($_SESSION['user']) kann ich überprüfen, ob jemand noch eingeloggt ist oder nicht. Tun Sie dies nicht, wenn Sie benutzerabhängige Informationen an einer anderen Stelle in Ihrer Sitzung speichern. Andernfalls kann der nächste sich einladende Benutzer Informationen erhalten, die er nicht sehen sollte (in diesem Fall verwenden Sie session_destroy();).

aber Sicherheit? Deaktivieren Sie einfach die Session-ID-Propagierung durch die GET/POST-URL (nur Cookies), damit sie nicht in URLs enden, die zwischengespeichert oder an andere verteilt werden können (in diesem Fall wäre ein Session-Hijacking möglich). Sie können das tun, indem Sie in der php.ini session.use_only_cookies setzen.

Es kann zusätzliche Sicherheitsprobleme geben, wenn Sie auf einem nicht vertrauenswürdigen und/oder falsch konfigurierten gemeinsam genutzten Server hosten - dies könnte dazu führen, dass andere Personen auf demselben Computer Ihre Sitzungsdaten lesen. In diesem Fall könnten Sie Ihre Sitzungsdaten in einer Datenbank speichern, indem Sie den Sitzungshandler neu schreiben. Suchen Sie einfach nach session handler mysql auf den Intertubes, ich bin mir sicher, dass es genug fertige Lösungen gibt. und speichern Sie keine vertraulichen Informationen wie Passwörter in der Sitzung, machen Sie besser eine Abfrage, wenn Sie sie vergleichen müssen.

anders als das ... Verwenden Sie SSL/HTTPS für Login und Benutzerverwaltung, so dass keine Klartext Passwörter übertragen werden. Speichere nur pw-Hashes mit Salz in der Datenbank. Lassen Sie niemanden die Passwörter sehen (dh drucken Sie sie niemals in HTML oder E-Mails). Verwenden Sie keine auto_increment-Werte für IDs, die der Benutzer sehen kann (und daher raten kann). ok, das ist schon außerhalb des Fragenumfangs.

+0

"und speichern Sie keine vertraulichen Informationen wie Passwörter in der Sitzung, machen Sie besser eine Abfrage, wenn Sie sie vergleichen müssen." - Nun, ich denke, es ist schneller, eine One-Way-verschlüsselte Version des Passworts (md5 + Hash) zu speichern, und überprüfen Sie es stattdessen, um die Abfrage immer wieder auf die db Remake – Strae

+0

wahr, aber normalerweise müssen Sie nicht überprüfen das Passwort bei jedem Seitenaufruf, nur auf # 1: Einloggen und # 2: Ändern (wenn Sie den Benutzer bitten, den aktuellen Pw anzugeben, um einen neuen festzulegen). für # 1 müssen Sie die Datenbank abfragen, und # 2 passiert nicht sehr oft, so dass der zusätzliche Overhead vernachlässigbar ist. – stefs