Log In für ein Board

MsvP@habdichliebhasi

Erfahrenes Mitglied
Hallo zusammen.

Ich würde gerne einen sicheren und guten LogIn für mein Board programmieren.
Ich hatte mir folgendes Tutorial durchgelesen und angefangen es umzusetzen:
http://www.tutorials.de/forum/php-tutorials/9684-php-mysql-login-system-mit-sessions.html

Leider sind mir da jetzt einige Probleme aufgefallen, von denen ich nicht genau weiß wie ich sie umgehen kann.

Das Login Script ist ja eigentlich für eine spezielle Interne Seite. Bei meinem Board sollen aber auch Gäste die möglichkeit haben, sich dass Board anzuschauen und als GAST zu posten. Jetzt möchte ich aber nicht zwei verschiedene Dateien dafür erstellen.
Wie kann ich es bewerkstelligen, dass ein und die selbe Datei einmal ein Gastprofil inne hat und einmal das jeweilige Userprofil?

Weiter habe ich das Problem, dass das Board über ein Template in die Hauptseite integriert wird. Dadurch das ich die Section starten muss bevor ich den Rest der Seite einleite weiß ich nicht ob es da zu Schwierigkeiten kommen kann, da diese ja in dem Beispiel bei jeder Seite wieder geöffnet wird, oder ob es egal ist wenn ich sie einmal im Haupttemplate öffne.

Gruß,
Micha.
 
Ja wie Gumbo schon gesagt hat.... würde es so handhaben dass du die Session überüprüfst und vielleicht zu Sicherheit nochmal überprüfst ob die Daten die in der Session sind auch mit den Datn in der Datenbank übereinstimmen.

Wenn ja--> User angemeldet
Wenn Nein-> User=Gast

Hier mal so kleiner Schnipsel:
PHP:
<?php
if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id']))
{
  $query = "SELECT * FROM `user` WHERE id='".$_SESSION['user_id']."'";
  $do = mysql_query($query);
  if (mysql_num_rows($do) == 1)
  {
    $data = mysql_fetch_assoc($do);
    $user = $data['user_name'];
  }
}
else
{
  $user = "gast";
}
?>


Also das wäre so halt kleiner schnipsel...habe mir das nur ausgedacht ma eben vielleicht hilft dir das ja ;-)

MFG Niels
 
Ja also eurer Lösungsansatz ist natürlich richtig. Hät ich auch selbst dran denken können. :-)

Aber mal so eine andere Frage, wie lange und wie wird eigentlich diese Session gespeichert?

Muss jedes Browserfenster geschlossen sein damit sie gelöscht wird? Oder wie funktioniert das?
Soll ja möglichst sicher sein.
 
PHP:
<?php
if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id']))
{
  $query = "SELECT * FROM `user` WHERE id='".$_SESSION['user_id']."'";

Wie sieht das eigtenltich aus mit Ressourcen-Verbrauch?
Wenn auf _jeder_ Seite durch _jeden_ Besucher eine Datenbankabfrage geschieht, macht sich das für die Server-Hardware und letztlich in der Performance der Seite bemerkbar? Oder sind das Peanuts.

Aber mal so eine andere Frage, wie lange und wie wird eigentlich diese Session gespeichert?
Muss jedes Browserfenster geschlossen sein damit sie gelöscht wird? Oder wie funktioniert das?

Sessions sind leider länger gültig als wie der Browser geschlossen ist. Deswegen ist es auf jeden Fall ein Sicherheitsproblem, wenn man den Verlauf beim Browser durchforstet, WENN Cookies deaktiviert sind und die PHP-Config erlaubt alternativ die SID an die URL anzuhängen.
Wie lange die Session-Variable gültig ist, weiss ich nicht. Aber lange. Wenn ich bei meinem Hoster eine URL mit SID nach 24h aufrufe ist sie immer noch gültig! Und evtl noch länger...
Sessions in Verbindung mit entsprechender Server-Config sind nicht das Gelbe vom Ei. So würde ich das nach meiner bescheidenen Beschäftigung mit dem Thema beurteilen.
Wenn die von Headmaster vorgeschlagene Idee auf jeder Seite kein Geschwindigkeit-Problem bedeutet könnte man auch zusätzlich, die von einem anderen Tut-User (Name vergessen) Idee einsetzen und einen uniquen Fingerprint aus Client-Daten erzeugen und bei jeder Seite abfragen. Zusätzlich einen Zeitstempel, der eine beispielsweise 10 Minuten unbenutze Session-ID in der DB für ungültig erklärt.
Das alles summiert würde das Login-System, zumindest sicherer gestalten.

Grüsse
 
Zuletzt bearbeitet:
Hm, aber wie wird das denn in Foren im allgemeinen gemacht?

Ich habe früher immer einfach eine rnd - id erstellen lassen, diese dann in eine Datenbank + Usernamen gespeichert und dann immer abgefragt ob der User sich so und so lange nicht mehr bewegt hat. So wie gerade meintest.

Nur ehrlich gesagt finde ich das nicht so super bei einem Board.

Wie ist das denn z.B. hier im Forum geregelt? Die Form wie es hier funktionell klappt finde ich super. Man hat die Möglichkeit alles zu lesen, kann sich direkt oben am Seitenkopf einloggen und man bleibt eingeloggt wenn man es wünscht bzw wird nicht nacher zehn Minuten inaktivität gekickt (das finde ich nämlich User unfreundlich und finde ich eher wichtig bei einer hochsicherheitsseite).

Gruß,
Micha
 
such einfach mal in der ini nach session

session.lifetime_gc oder so sollte der wert sein, der die lifetuime einer session in sekunde enthält.

Wie ist das denn z.B. hier im Forum geregelt? Die Form wie es hier funktionell klappt finde ich super. Man hat die Möglichkeit alles zu lesen, kann sich direkt oben am Seitenkopf einloggen und man bleibt eingeloggt wenn man es wünscht bzw wird nicht nacher zehn Minuten inaktivität gekickt (das finde ich nämlich User unfreundlich und finde ich eher wichtig bei einer hochsicherheitsseite).

Cookie setzen mit ner lifetime von... nem jahr oder so
 
dann haste bestimmt keinen direkten zugriff auf die datei..
über ini_set gehts vllt wenns aktiviert ist,

bsp:

PHP:
    ini_set('session.cookie_lifetime', 3600*24*365);
    // lifetime des cookies setzen
    ini_set('session.gc_maxlifetime', 3600*24*365);
    //lifetime der Session setzen
 
Zurück