Session.class.php Anforderungen:1. Die Sessions sollen in der Db abgelegt werden, dementsprechend wird der Sessionhandler modifiziert. Der Session-Table der Db dient dann auch zum Lookup, wer & wo & wann online ist.
2. 2 Wege müssen unterstützt werden:
A. Beim User sind Cookies aktiviertIn diesem Fall wird ein Session-Cookie gesetzt.
Dieses wird nach dem Session-Namen benannt und mit der sessionid gefüllt.
Beim Seitenwechsel wird geprüft, ob ein solches Cookie existiert.
Wenn ja, erfolgt eine Prüfung ob SessionId aus dem Cookie mit der SessionId aus der Db übereinstimmt.
Im Anschluß erfolgen dann Sicherungsprüfungen, z.B. ob der username oder user_id in der Db-Session auch den Werten des Cookies entspricht.
Es ergeben sich für diesen Weg die folgenden Einstellungen:
ini_set("session.use_cookies","1"); // cookies benutzen
ini_set("session.use_only_cookies","1"); // nur cookies erlauben, SID in URL wird nicht beachtet
ini_set("session.use_trans_sid","0"); // sichergehen das sid nicht automatisch angehängt wird
Stichwort Cookie-Lifetimes?
Insbesondere für das Remember-Me Feature
todo: prüfen!
session.cookie_lifetime
session.cookie_expire
B. Beim User sind Cookies deaktiviertFür den Fall das Cookies deaktiviert sind, muß die SessionID von Seite zu Seite übergeben werden, d.h. es muß die SessionID an die URL angefügt werden.
Fest steht also: ini_set("session.use_cookies","0");
Einerseits ist es möglich manuell alle Links um .php?".sessionname()."=".sessionid()." zu ergänzen.
Desweiteren kann durch die ini_set("url_rewriter.tags","tags....") angegeben werden, bei welchen Tags automatisch um die SessionId ergänzt werden soll.
Das Problem scheint hier zu sein, daß es vom XHTML-Standard abweicht.
Demnach ist ini_set("url_rewriter.tags",""); zu setzen.
Andererseits kann durch die ini_set-Einstellung session.use_trans_sid = 1 eine Transparenz bzw. Unsichtbarkeit der Session eingestellt werden. Das Anhängen erfolgt auf 2 Arten:
1. wenn ein <form> field gegeben ist, wird die SID als Hidden Field im POST übertragen
2. ansonsten wird die SID einfach die URL angehängt.
Ein Sicherheitsproblem ergibt sich nicht, da die SID nur bei relative Links angefügt wird, und relative Links können nur auf die Herkunfts-Domain aufgelöst werden.
Demnach folgende Settings:
ini_set("session.use_cookies","0"); // cookies nicht benutzen
ini_set("session.use_only_cookies","0"); // SID in URL wird beachtet
ini_set("session.use_trans_sid","1"); // sichergehen das sid automatisch angehängt wird
ini_set("url_rewriter.tags",""); // jedoch nicht per url_rewriting
3. Sicherungen:
A. Session-Timeout, d.h. das Zeitfenster der Session wird begrenzt.
session.gc_maxlifetime gibt an wann die Session in den Müll kommt, also aus der Db rausfällt.
B. ... IP, referer - gegenprüfung ?? Sinnvoll?
Siehe Ausführungen im anderen Thread bezüglich der Sicherungsvorschläge.
IP: Problem AOL User mit wechselnder IP
REFERER: in session ablegen bzw. session.referer_check
BROWSER: in session ablegen , viele verwenden gleiche Systeme/Software
XP+Firefox ... Kennung wäre identisch