[php] ip-log, und time-log

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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();
}
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Sincer
Mitglied
Beiträge: 26
Registriert: 03.01.2008 19:25

Beitrag 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 ;)
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag 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...
Zuletzt geändert von Boecki91 am 04.01.2008 14:19, insgesamt 1-mal geändert.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
Sincer
Mitglied
Beiträge: 26
Registriert: 03.01.2008 19:25

Beitrag 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
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag 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.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Sincer
Mitglied
Beiträge: 26
Registriert: 03.01.2008 19:25

Beitrag 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
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag 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.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
Sincer
Mitglied
Beiträge: 26
Registriert: 03.01.2008 19:25

Beitrag 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
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag 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']
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Antworten

Zurück zu „Coding & Technik“