Hello,
habe da ein kleines Ratespiel:
Gegeben sind
eine MySQL-Tabelle:
CREATE TABLE `login` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`lastclick` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`createdate` DATETIME NOT NULL,
`sessionstart` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`session` VARCHAR(50) NOT NULL,
`lastupdate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`nickname` VARCHAR(50) NOT NULL,
`lastname` VARCHAR(50) NOT NULL,
`password` VARCHAR(50) NOT NULL,
`firstname` VARCHAR(50) NOT NULL,
`email` VARCHAR(50) NOT NULL,
`status` INT(11) NOT NULL DEFAULT '0',
`level` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE INDEX `nickname` (`nickname`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=3;
eine Login-Funktion (vereinfacht dargestellt; Passwort wird noch verschlüsselt, usw):
function login()
{
$con = get_db_con(true);
if (!$con) return false;
$qry_login = "update `login`
set
session = '" . session_id() . "',
lastclick = now(),
sessionstart = now(),
where
nickname = '" . mysqli_real_escape_string($con, $_POST['data']['nickname'])."' and
password = '" . mysqli_real_escape_string($con, $_POST['data']['password'])."' and
status > 0";
if (mysqli_affected_rows($con) == 1)
{
$_SESSION['nickname'] = $_POST['data']['nickname'];
$_SESSION['sess_start'] = get_time();
$_SESSION['lastclick'] = get_time();
return 'Angemeldet als ' . htmlspecialchars($_SESSION['nickname']);
}
return false;
}
und eine Funktion zur Anmeldekontrolle:
function is_logged()
{
$con = get_db_con(true);
if (!$con) return false;
$qry_is_logged = "
update `login`
set
lastclick = now(),
where
session = '" . session_id() . "' and
(now() - lastclick < " . SESS_MAXTIME . ")";
if (mysqli_affected_rows($con) === 1)
{
$_SESSION['lastclick'] = get_time();
return 'Is_logged(), Angemeldet als ' . htmlspecialchars($_SESSION['nickname']);
}
return false;
}
Nun die Preisfrage:
Warum liefert die "is_logged()"-Funktion (allermeistens) kein Ergebnis, wenn man sie im selben Script aufruft, obwohl der User ja nun "angemeldet" ist?
Ich habe daran leider ganz schön lange geknabbert, aber die Lösung ist ganz verblüffend einfach. Mal sehen, ob jemand von Euch bis morgen darauf kommt ;-)
Als Preis dürfen die ersten Drei an der nächsten "SELF-Week" in der Odertaler Sägemühle kostenlos teilnehmen und auf meine Kosten Weizenbier saufen ;-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg