versuch13
Erfahrenes Mitglied
Ich möchte einen dauerhaften Login (7 Tage) realisieren. Nun frage ich mich was die beste und vor allem sicherste Methode dafür ist?
Momentan werden eingeloggte User an einer Session erkannt. Daher habe setze ich nun beim Login einen Cookie, besucht der User die Seite und es ist ein Cookie gestetzt aber keine Session so wird diese gestaret.
Session Einstellungen
Beim einloggen:
zu erste Datenbankabfrage und vergleich der Formulardaten mit den Daten der Datenbank und dann werden Sessions und Cookies gesetzt.
Kommt der User nun wieder und es besteht ein Cookie:
ich habe mir gedacht ich speicher zusätzlich etwas in der Datenbank um den User nochmals zu identifizieren, ich speichere die SessionID beim einloggen in der Datenbank und in einem dauerhaften Cookie und vergleiche diese Daten beim erneuten setzen der Session. Macht dass so überhaupt Sinn? Eher nicht oder? Denn gelangt jemand an die Cookie Daten so erhält er zutritt.
Des weiteren, ich habe gesehen dass das Loginsystem von Drupal mit session.cookie_lifetime die Session Dauer auf knapp vier Wochen setzt, aber auch dort werden zusätzliche Daten in der Datenbank abgelegt nur ganz durchsteigen tue ich da nicht. Wäre session.cookie_lifetime zu erhöhen auch eine Möglichkeit?
Worauf ich also hinaus will ist hoffentlich klar, wie sichere ich das System ab?
Momentan werden eingeloggte User an einer Session erkannt. Daher habe setze ich nun beim Login einen Cookie, besucht der User die Seite und es ist ein Cookie gestetzt aber keine Session so wird diese gestaret.
Session Einstellungen
HTML:
ini_set('session.use_trans_sid', 0);
ini_set('session.use_cookies', 1);
Beim einloggen:
zu erste Datenbankabfrage und vergleich der Formulardaten mit den Daten der Datenbank und dann werden Sessions und Cookies gesetzt.
PHP:
session_regenerate_id(true);
$_SESSION['logged_in'] = true;
$_SESSION['user'] = fct_text($row['name']);
$_SESSION['userid'] = (int) $row['id'];
$_SESSION['rights'] = (int) $row['rights'];
$sessionid = session_id();
$query = "INSERT INTO sessions (uid, sessionid, savetime) VALUES (".$row['id'].", '".$sessionid."', NOW())
ON DUPLICATE KEY UPDATE savetime = NOW(), sessionid = '".$sessionid."'
";
$result = mysql_query($query) OR die(mysql_error());
setcookie('UID', (int) $row['id'], time()+3600*24*7);
setcookie('SID', $sessionid, time()+3600*24*7);
Kommt der User nun wieder und es besteht ein Cookie:
PHP:
if(isset($_COOKIE['SID']) AND !isset($_SESSION['logged_in'])) {
$sql = "SELECT
a.`id`,
a.`name`,
a.`rights`,
b.`sessionid`
FROM
`user` as `a`
INNER JOIN
`sessions` as `b`
ON
a.`id` = b.`uid`
WHERE
a.`id` = ".(int) $_COOKIE['UID']."
AND DATEDIFF(NOW(), b.`savetime`) <= 7
";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
if($row['sessionid'] == $_COOKIE['SID']) {
$_SESSION['logged_in'] = true;
$_SESSION['user'] = fct_text($row['name']);
$_SESSION['userid'] = (int) $row['id'];
$_SESSION['rights'] = $row['rights'];
}
}
ich habe mir gedacht ich speicher zusätzlich etwas in der Datenbank um den User nochmals zu identifizieren, ich speichere die SessionID beim einloggen in der Datenbank und in einem dauerhaften Cookie und vergleiche diese Daten beim erneuten setzen der Session. Macht dass so überhaupt Sinn? Eher nicht oder? Denn gelangt jemand an die Cookie Daten so erhält er zutritt.
Des weiteren, ich habe gesehen dass das Loginsystem von Drupal mit session.cookie_lifetime die Session Dauer auf knapp vier Wochen setzt, aber auch dort werden zusätzliche Daten in der Datenbank abgelegt nur ganz durchsteigen tue ich da nicht. Wäre session.cookie_lifetime zu erhöhen auch eine Möglichkeit?
Worauf ich also hinaus will ist hoffentlich klar, wie sichere ich das System ab?