Seite 2 von 4

Verfasst: 04.01.2008 12:54
von gn#36
Was eigentlich noch sehr viel einfacher geht ist die Benutzung des PHP eigenen Session Systems.
Session Funktionen
[php:session_start]

Alle Daten die dich interessieren kannst du dann in $_SESSION speichern und die werden - sofern der User Cookies aktiviert hat oder du an die URL die SID angehängt hast (das muss bei jeder URL passieren) - im nächsten Aufruf wieder verfügbar sein und zwar für jeden User einzeln.

Die Passwörter für den Login musst du natürlich an zentraler Stelle ablegen, aber ansonsten kannst du natürlich alles über die Session regeln.
Deine Zeitregelung könntest du dann in etwa so realisieren:

Code: Alles auswählen

session_start();
if(!isset($_SESSION['time_started']))
{
$_SESSION['time_started'] = time();
}
else if(time() - $_SESSION['time_started'] > 3600)
{
//Mehr als eine Stunde rum:
echo "Sie sind zu lange eingeloggt, ihre Zeit ist vorbei";
die();
}

Verfasst: 04.01.2008 13:26
von Sincer
ok, ich habe zwar gehört, dass eine speicherung per session, oder cookies sehr unsicher sein soll, aber da ich ja keine bank sichern will, sondern nur einen halbwegs guten loginbereich schaffen will :P...ist das ein guter vorschlag ;)

und ich kann dann die ip in die gleiche session packen? (mit sessions habe ich wieder keine erfahrung :( )... also so, dass sich mit dem gleichen link dann keine andere ip einloggen kann, als die, die in der session gespeichert ist, und die sich selber nach deinem script eben löscht...

Code: Alles auswählen

<?php

session_start();
if(!isset($_SESSION['time_started']))
{
$_SESSION['time_started'] = time();

// hier wird die session für die IP bestimmt:

$_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
}

else if(time() - $_SESSION['time_started'] > 3600)
{
//Mehr als eine Stunde rum:
echo "Auto-Logout nach einer Stunde!";

/* Fragen:
-frage1: kann ich hier gleich eine verlinkung zu der startseite machen, oder ist das nicht nötig?
-frage2: wie mache ich das, dass er beim betreten auch überprüft, dass die ip session mit der time-session übereinstimmt?
*/
die();
}

?>
ginge das so?
fragen sind im code einkommentiert!

thx
Sincer ;)

Verfasst: 04.01.2008 13:26
von Boecki91
Zu dem Um Mitternacht 5 Uhr X Uhr...:
Mit PHP würde dies nicht gehen, zumindest würde es den Rahmen bei weitem sprengen.
Zumal ist das nur ein drumherrumgefusche. was die eigendliche Problematik nicht behebt.

@ gn#36

Genau das müsste in dem Tutorial das ich verlinkt habe gemacht werden...

Verfasst: 04.01.2008 14:14
von Sincer
d.h. ich soll die session idee wieder in den wind schießen?

ok, und wenn ich wie vorhin gesagt das ganze etwas lessiger ansehe - also keine stündliche löschung des ip-logs sondern nur tägliche - was zwar keinen autologaut zur folge hat, aber immerhin muss man sich mind. einmal am tag einloggen...

kann ich das mit dem datum so machen, dass das aktuelle datum gespeichert wird, und wenn jem. die seite betritt (oder sich einloggt, wie auch immer) dieses datum überprüft wird, und wenn es nicht merh aktull ist, das aktuelle datum reinschreibt, und den ip-log löscht?

das wäre doch möglich, oder?
wenn ja, wie mache ich eine if, die abfragt, ob ien tag vergangen ist, (oder ein monat, oder ein jahr...)??

thx
Sincer

Verfasst: 04.01.2008 14:18
von Boecki91
Mit PHP würde dies nicht gehen bezog sich auf die Idee die Datei um Miternacht und X Uhr zu leeren.

Das mit den $_SESSION ist nicht gemeint gewesen.
Ich editiere es oben.

Verfasst: 04.01.2008 14:32
von gn#36
Boecki91 hat geschrieben:@ gn#36

Genau das müsste in dem Tutorial das ich verlinkt habe gemacht werden...
Ja, ich hatte in den Link nicht reingeschaut, aber du hast vollkommen recht, das ist genau das gleiche, nur ein wenig ausführlicher ;) .
Sincer hat geschrieben:ok, ich habe zwar gehört, dass eine speicherung per session, oder cookies sehr unsicher sein soll, aber da ich ja keine bank sichern will, sondern nur einen halbwegs guten loginbereich schaffen will ...ist das ein guter vorschlag
Letztlich sind zwingend alle Verfahren, bei denen du nicht auf jeder Seite ein Passwort eingeben musst in irgend einer Weise Session basiert. Ob die jetzt die PHP Session Funktionen dafür nutzen oder nicht ist dabei eher unwichtig (Du kannst die PHP Session Handler auch durch deine eigenen Ersetzen und das bei php dateibasierte Logging z.B. durch ein datenbankbasiertes ersetzen. Wenn du noch keine großartige Erfahrung mit PHP hast ist das aber kaum zu empfehlen, denn dann kann es dir selbstverständlich passieren, dass du da kleinere oder größere Sicherheitslücken einbaust. So ein Authentifizierungssystem ist immer nur so sicher wie das schwächste Glied. 100% Sicherheit gibt es nicht. Du kannst nur versuchen möglichst nahe heran zu kommen, indem du SSL verwendest, Passwörter nur verschlüsselt überträgst, die Session-ID regelmäßig wechselst (oder zumindest nach der Passwort Eingabe, so dass ein Angreifer die Session eines anderen Users nicht so leich klauen kann), alle eingegebenen Daten des Users auf Typ und Inhalt prüfst (soweit möglich) und immer aktuelle Software auf deinem Server hast (sofern du hierauf Einfluss hast).

Verfasst: 04.01.2008 14:36
von Sincer
k, auf letzteres habe ich keinen einfluss -> gesponserter webspace :P

k..dann greife ich die session idee wieder auf,
die fragen in dem code von vorher gelten also wieder! :P

könnt ihr mir die auch noch beantworten?

thx
Sincer

Verfasst: 04.01.2008 15:01
von Boecki91
Wie gesagt das Tutorial:
http://tut.php-quake.net/sessions.html
http://tut.php-quake.net/login.html

Erklärt ausführlich wie das mit Sessions funktioniert,

- IP in Session packen - wird erklährt (5.)

Alles was in $_SESSION gespeichert ist kannst dü überall mit hin nehmen:

Wenn die Zeit von einer Stunde um ist nimmst du
session_destroy() und machst die Session einfach kaputt. Alles was auf diese Session bezogen gespeichert wurde ist dann gelöscht.

Verfasst: 04.01.2008 15:28
von Sincer

Code: Alles auswählen

<?php

session_start();
if(!isset($_SESSION['time_started']))
{
$_SESSION['time_started'] = time();

// hier wird die session für die IP bestimmt:

$_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
}

else if(time() - $_SESSION['time_started'] > 3600)
{
// Mehr als eine Stunde rum:
echo "Auto-Logout nach einer Stunde!";

// die IP löschen:
session_destroy($_SESSION['IP']);
//geht nicht auch unset($_SESSION['IP']);??

die();
}

?>
Fragen:
frage1: kann ich hier gleich eine verlinkung zu der startseite machen, oder ist das nicht nötig?
frage2: wie mache ich das, dass er beim betreten auch überprüft, dass die ip session mit der time-session übereinstimmt?
frage3: was macht das die();?

frage 2 ist mir eig. am wichtigsten... weil, so wie ich das gemacht habe, hängen die zwei sessions ja überhaupt nicht zusammen...
es wird ja nicht überprüft, ob die ip die ist, zu der auch dei session gehört...also, ka :(
http://tut.php-quake.net/sessions.html
- IP in Session packen - wird erklährt (5.)
da wird zwar gesagt, dass es gemacht wird, aber nicht wie...

auf jeden fall danke ;)
Sincer

Verfasst: 04.01.2008 16:14
von Boecki91
Du musst nur session_destroy(); aufrufen, ohne irgendetwas dahinter. unset() geht nicht da du ja nicht nur die Variable löschen willst sondern die ganze Session.
Frage 1:
Einfach mit echo verlinken damit die User da daraufklicken können

Frage 2:
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['IP'])
{
die("IP-Change");
}

Frage 3:
Einfach im Handbuch nachschauen:
http://www.php.net/manual/de/function.die.php

IP in Session Packen:
$_SESSION['IP'] = $_SERVER['REMOTE_ADDR']

Zeit in Session Packen:
$_SESSION['TIME'] = time()
Zeit Prüfen

time() -$ein_paar_sekunden <= $_SESSION['TIME']