Hi sam,
also die möglichkeit einträge in der db auf www.xyz.com zu machen existiert aber dann kommt eben das zeitproblem... könnte man die zeit von irgendwo anders beziehen?
Mach es doch so, wie du es bereits angedacht hast:
- Auf dem Server foo.com logt der User sich ein, dabei Speichert das Script login.php in der Tabelle users_online den Namen des Users, weiterhin wird ein zufälliger String mit z.B. 30 Zeichen generiert und ebenfalls in der Tabelle users_online gespeichert - wenn du mit Sessions arbeitest, kannst du die Session ID nehmen.
- Der User klickt auf den Link, der ihn zu Server xyz.com befördert, an die URL dateibrowser.php wird ?sessid=Der30ZeichenLangeZufälligeString angehängt.
- Das Script dateibrowser.php verbindet sich mit dem MySQL-Server von foo.com und schaut, ob $_GET['sessid'] in der Tabelle users_online steht, wenn ja, dann hast du auch direkt den Usernamen. Wenn nein, dann darf der User das Script nicht aufrufen und du lässt das Script abbrechen.
Theoretisch wäre es dann zwar möglich, diesen Schutzmechanismus zu umgehen - aber die Wahrscheinlichkeit, dass man die Zeichenkette mit 30 Zeichen errät (und das auch noch innerhalb der Zeit, wo die existiert) ist schon verdammt gering, wenn bei dir nicht mehrere Millionen User gleichzeitig online sind.
Was du dir aber noch überlegen müsstest, wäre eine Art „Garbage Collection“ - d.h. du musst dafür sorgen, dass aus der Tabelle users_online auch die alten Einträge rausfliegen. Dazu gehört zuerst mal, dass dein Script logout.php den Eintrag löscht. Was aber wenn der User nicht brav den Logout Button klickt? Für den Fall musst du dir noch überlegen, wie du die zu löschenden Einträge findest. Dazu speicherst du am besten noch einen Timestamp mit in den Eintrag und lässt dann regelmäßig (Stichwort: CronJobs) ein Script laufen, was alle Einträge mit zu alten Timestamps rausschmeißt.
MfG, Dennis.