dav133
2007-08-14, 16:24:29
ntag,
Hab hier 2 PHP-Sessionbasierte Loginsysteme. Würde gerne wissen, welches eher zu empfehlen ist, obwohl beider von der grundlegenden Funktionsweise sehr ähnlich sind. Beim einen wird in der Datenbank die Session gespeichert und bei jedem neuen Seiten aufruf mit der aktuellen Session verglichen. Dies sollte m.E. nach eine höhere Datenbanklast als konventionelles Session-Checking haben.
Genug der Vorrede, hier die relevanten Code-Abschnitte zum Checken der Session:
Methode 1:
<?php
session_start ();
if (!isset ($_SESSION["user_id"]))
{
header ("Location: formular.php");
}
?>
-> Diese Datei wird in jede andere Datei, die geschützt werden soll, eingebunden
Methode 2:
function check_user ( $name, $pass ) {
// magic quotes anpassen
if ( get_magic_quotes_gpc() ) {
$name = stripslashes($name);
$pass = stripslashes($pass);
}
// escapen von \x00, \n, \r, \, ', " und \x1a
$name = mysql_real_escape_string($name);
// escapen von % und _
$name = str_replace('%', '\%', $name);
$name = str_replace('_', '\_', $name);
$sql = 'SELECT UserId FROM users WHERE UserName = \'' . $name . '\' AND UserPass=\'' . md5($pass) . '\'';
if ( !$result = mysql_query($sql) ) {
exit(mysql_error());
}
if ( mysql_num_rows($result) == 1 ) {
$user = mysql_fetch_assoc($result);
return ( $user['UserId'] );
} else {
return ( false );
}
}
function login ( $userid ) {
$sql = 'UPDATE users SET UserSession = \'' . session_id() . '\' WHERE UserId = ' . ((int)$userid);
if ( !mysql_query($sql) ) {
exit(mysql_error());
}
}
function logged_in () {
$sql = 'SELECT UserId FROM users WHERE UserSession = \'' . session_id() . '\'';
if ( !$result = mysql_query($sql) ) {
exit(mysql_error());
}
return (mysql_num_rows($result) == 1);
}
Von der Menge des Codes her ein beträchtlicher Unterschied, also zur zweiten Frage: Was hat es für Vorteile, wenn ich die Session-ID in die Datenbank speichere und permanent vergleiche? Ist das sicherer?
lg
Hab hier 2 PHP-Sessionbasierte Loginsysteme. Würde gerne wissen, welches eher zu empfehlen ist, obwohl beider von der grundlegenden Funktionsweise sehr ähnlich sind. Beim einen wird in der Datenbank die Session gespeichert und bei jedem neuen Seiten aufruf mit der aktuellen Session verglichen. Dies sollte m.E. nach eine höhere Datenbanklast als konventionelles Session-Checking haben.
Genug der Vorrede, hier die relevanten Code-Abschnitte zum Checken der Session:
Methode 1:
<?php
session_start ();
if (!isset ($_SESSION["user_id"]))
{
header ("Location: formular.php");
}
?>
-> Diese Datei wird in jede andere Datei, die geschützt werden soll, eingebunden
Methode 2:
function check_user ( $name, $pass ) {
// magic quotes anpassen
if ( get_magic_quotes_gpc() ) {
$name = stripslashes($name);
$pass = stripslashes($pass);
}
// escapen von \x00, \n, \r, \, ', " und \x1a
$name = mysql_real_escape_string($name);
// escapen von % und _
$name = str_replace('%', '\%', $name);
$name = str_replace('_', '\_', $name);
$sql = 'SELECT UserId FROM users WHERE UserName = \'' . $name . '\' AND UserPass=\'' . md5($pass) . '\'';
if ( !$result = mysql_query($sql) ) {
exit(mysql_error());
}
if ( mysql_num_rows($result) == 1 ) {
$user = mysql_fetch_assoc($result);
return ( $user['UserId'] );
} else {
return ( false );
}
}
function login ( $userid ) {
$sql = 'UPDATE users SET UserSession = \'' . session_id() . '\' WHERE UserId = ' . ((int)$userid);
if ( !mysql_query($sql) ) {
exit(mysql_error());
}
}
function logged_in () {
$sql = 'SELECT UserId FROM users WHERE UserSession = \'' . session_id() . '\'';
if ( !$result = mysql_query($sql) ) {
exit(mysql_error());
}
return (mysql_num_rows($result) == 1);
}
Von der Menge des Codes her ein beträchtlicher Unterschied, also zur zweiten Frage: Was hat es für Vorteile, wenn ich die Session-ID in die Datenbank speichere und permanent vergleiche? Ist das sicherer?
lg