PHP: Session Verständnisprobleme

NiciB

Erfahrenes Mitglied
Hallo!

Ich will gerade auf meiner Seite einen passwortgeschützten Bereich (mittels Sessions) machen, kein Benutzername - nur Passwort. Allerdings plagen mich noch ein paar Verständnisprobleme.

Ich erkläre kurz meinen Stand:

Ich gebe auf der 1. Seite das Passwort ($eingabe) ein. Auf der 2. Seite vergleiche ich die Eingabe ($eingabe) mit dem Passwort ($pwd). Falls es übereinstimmt erzeuge ich eine Session mit:

session_start ();
$_SESSION["sess_id"] = $eingabe; /* könnte auch statt $eingabe $pwd nehmen */

auf den passwortgeschützten Seiten überprüfe ich dann die Session mit:

session_start ();
if(!isset ($_SESSION["sess_id"])) {
... //Umleitung auf login Seite
}
... //normal weiter auf der Seite

Jetzt habe ich ein paar Fragen:

1. Wo wird diese Session ID gespeichert? auf dem Server oder auf dem client?

2. In meinem Fall überprüfe ich nur ob die Sessionvariable vorhanden ist [if(!isset ($_SESSION["sess_id"]))]. Wenn jetzt aber jemand die Seite betritt der das Passwort kennt und auch eingibt, kann dann ein anderer, der gleichzeitig die Seite besucht aber das Passwort nicht kennt, die passwortgeschützten Seiten anschauen, weil ja eine Session Variable vorhanden ist (zwar vom anderen Benutzer, aber halt vorhanden)? Oder werden zu dem Namen ($eingabe) noch andere Daten in der Session ID gespeichert (IP Adresse oder Zufallszahl o.ä.)?

Wäre für Antworten und allgemeine Tipps dankbar
 
Also ich hoffe habe dich richtig verstanden.
Bin nachdem Wochenende noch etwas 'wirr' im Kopf.
Also die Session ID ,wird entweder auf dem Client gespeichert(mittels Cookie), oder aber in der URL ,allerdings nur für diesen Benutzer (aussernatürlich es tippt jemand die Session ID ein was aber nahezu unmöglich ist ,da sie leicht kryptisch sind).
Siehe :
http://de.php.net/session
Dort findeste eigentlich alles was man zu Session wissen sollte ansonsten noch
zu empfehelen
http://tut.php-q.net/sessions.html
 
so wie ich es gemacht habe wird es als Cookie gespeichert oder?

die Session ID immer per Url weitergeben finde ich etwas mühsam oder überschätze ich den Aufwand? Wird mir aber nichts anderes übrigbleiben, denn Cookies könnten ja ausgeschaltet sein (d.h. geblockt werden)...
 
Es kommt darauf an was in deiner php.ini drin steht.
Wenn dort der Eintrag bei session.use_cookies oder
session.use_only_cookies auf 'On' ,in der Sektion Session , ist ,dann wird ein cookie benutzt ansonsten eben per URL.
 
session.use_cookies steht auf ON
session.use_only_cookies steht auf OFF


Ich hab außerdem bei dem zweiten Link, den du gepostet hast folgendes gelesen:

"Muss ich die SessionID immer 'per Hand' mitliefern?
Wenn PHP auf mit transparenten Session-ID's kompiliert worden ist, dann braucht man die SID nicht extra anzugeben, weil dann der Server an jeden URL automatisch selbige anhängt. "

ich hab bei mir diese Zeile gefunden:
session.use_trans_sid, ist auf ON
hat die etwas mit transparenten Session-ID's zu tun?

Heißt das, dass wenn ich eine Session erzeuge ich mich um die Weitergabe nicht mehr kümmern muß weil die ID automatisch jedem Link angehängt wird? Also müßte ich auf jeder Seite nur noch überprüfen ob die ID vorhanden ist (isset), oder versteh ich wieder was falsch?
 
Der Nachteil von Cookies besteht darin, dass sie clientseitig geblockt werden können, was zur Folge hat, dass ein solcher User sich bei deine System nicht mehr einloggen könnte.
Deshalb solltest du dir auf jeden Fall überlegen, ob du nicht die Session-ID auch in der URL übergibst. Der Aufwand hierfür hält sich eigentlich in Grenzen. Neben der Möglichkeit, das automatische Anhängen der ID durch eine php.ini-Einstellung zu gewährleisten, kannst du nach folgender Konstantenfestlegung:
PHP:
define('SID', session_name() . '=' . session_id());
an jede URL einfach die Konstante SID anhängen, z.B. so:
PHP:
$url = 'ordner/seite.php?' . SID;
 
Ja Session starten und dann überprüfen, ob eine bestimmte Session-Variable gesetzt wurde, die den User berechtigt, auf den geschützten Bereich zuzugreifen.
Z.B. könntest du nach erfolgreichem Login, die Variable $_SESSION['logged_in'] auf true setzen und auf den geschützten Seiten überprüfst du, ob diese Variable gesetzt worden ist.
 
Zurück