Hi!
Ich bin gerade auf ein Problem mit meinen Session-Daten gestoßen. Und zwar benutze ich folgende Funktion um meine Session-Daten in meine Db zu schreiben:
Soweit so gut, jedoch wenn ich meine Page online teste, dann schreibt er mir jedesmal 2 Datensätze mit 2 unterschiedlichen Session_id's in die DB. Beide aber mit der gleichen IP und nur 1s versetzt.
Benutzt wird auch nur die 2., die später erzeugt wurde. Ich versteh jetzt leider nicht, waurm er das nur online macht.
PHP version: 4.4.2
MySQL version: 4.0.irgendwas
Ich bin gerade auf ein Problem mit meinen Session-Daten gestoßen. Und zwar benutze ich folgende Funktion um meine Session-Daten in meine Db zu schreiben:
PHP-Code:
function session_handle() {
if (!session_id()) {
session_start();
}
$query = "SELECT * FROM `session` WHERE `sess_id` = '" . session_id() . "'";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
if (!empty($row)) {
if (isset($_SESSION['user'])) {
$user = $_SESSION['user'];
}else {
$user = "";
}
if ($row['sess_ip'] != $_SERVER['REMOTE_ADDR']) { // wenn SESSID vorhanden, aber IP nicht übereinstimmend
return "Sie wurden aus Sicherheitsgründen ausgeloggt";
session_destroy();
session_start();
}
$query = "UPDATE `session` SET `sess_lastactive` = NOW(),
`sess_user` = '" . $user . "',
`sess_query_string` = '" . $_SERVER['QUERY_STRING'] . "' WHERE `sess_id` = '" . session_id() . "'";
mysql_query($query) or die(mysql_error());
} else {
if (isset($_SERVER['HTTP_ACCEPT_CHARSET'])) {
$charset = $_SERVER['HTTP_ACCEPT_CHARSET'];
}else {
$charset = "";
}
echo session_id();
$query = "INSERT INTO `session`
(`sess_id`, `sess_date`, `sess_lastactive`, `sess_ip`,
`sess_http_host` ,
`sess_http_user_agent` ,
`sess_http_accept` ,
`sess_accept_charset` ,
`sess_accept_language` ,
`sess_query_string`) VALUES
('" . session_id() . "', NOW(), NOW(),
'" .$_SERVER['REMOTE_ADDR'] . "',
'" . $_SERVER['HTTP_HOST'] . "',
'" . $_SERVER['HTTP_USER_AGENT'] . "',
'" . $_SERVER['HTTP_ACCEPT'] . "',
'" . $charset . "', '" . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . "',
'" . $_SERVER['QUERY_STRING'] . "')";
mysql_query($query) or die(mysql_error());
}
$query = "DELETE FROM `session` WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) > `sess_lastactive`";
mysql_query($query) or die(mysql_error());
}
Benutzt wird auch nur die 2., die später erzeugt wurde. Ich versteh jetzt leider nicht, waurm er das nur online macht.
PHP version: 4.4.2
MySQL version: 4.0.irgendwas
EDIT:
Das Skript wird direkt in der index datei aufgerufen, welche auch für jeden link startpunkt ist.
D.h. Das Skript wird jedesmal wenn jemand irgendwas auf der page macht durchlaufen.
EDIT:
Noch ne neue Erkenntnis: Wenn ich - während ich auf der page bin und bereits eine sess_id habe - den Table leere, dann schreibt er auch nur noch eine Spalte und nimmt nur die aktuelle sess_id
Kommentar