Seite 1 von 1

Überflüssige Sessions löschen

Verfasst: 14.08.2006 15:44
von Friedhelm S.
Hi,

meine Programmierkenntnisse halten sich in Grenzen. Ich habe folgendes Problem.

In meinem Forum gibt es einige User die ständig endlos viele Einträge bzw. Sessions erzeugen. Da mein VServer performancetechnisch ausreichend aber nicht super ist wird das Forum immer sehr langsam wenn die betreffenden User online sind. Leider ließ sich das Problem bei den User am Rechner nicht lösen. Deshalb habe ich mich entschlossen einige Zeilen in die index.php einzubauen, die überflüssige Sessions löschen. Das ganze scheint zu Funktionieren. Hier der Code:

$sql = "SELECT COUNT(*) as numrows
FROM " . SESSIONS_TABLE . "
WHERE session_user_id = '".$userdata['user_id']."'
AND session_id <> '".$userdata['session_id']."'";
$result = mysql_query($sql);
$session_count = mysql_result($result,0);

if ( $session_count >= '1')
{
$sql = "DELETE
FROM " . SESSIONS_TABLE . "
WHERE session_user_id = '".$userdata['user_id']."'
AND session_id <> '".$userdata['session_id']."'";
$result = mysql_query($sql);
$sql = "DELETE
FROM " . SESSIONS_TABLE . "
WHERE session_ip = '".$user_ip."'
AND session_user_id = '-1'";
$result = mysql_query($sql);
}

Das ganze scheint auch zu funktionieren. Da es aber wie gesagt in der index.php ist, dementsprechend oft ausgeführt wird und meine Laienprogrammierkenntnise hier aufhören, würde ich den Code gerne vereinfachen und hoffe auf Eure Hilfe.

Zusätzlich sind mir keine Probleme bewusst die durch den Code entstehen können.

Deshalb die Bitte an die Cracks oder Pros, sich den Code anzuschauen, den Code vielleicht zu vereinfachen oder zu verbessern und mir mögliche Probleme aufzuzeigen.

Verfasst: 17.08.2006 17:13
von Friedhelm S.
Hi,

nachdem mir aufgegangen war, dass in meinem Board nicht registrierte Benutzer eh kein Beiträge lesen können und demnach auch keine Suchergebnisse, ... brauchen habe ich nun folgenden Code in den page_header eingebaut:

$sql = "DELETE
FROM " . SESSIONS_TABLE . "
WHERE session_user_id = '-1'";
$result = mysql_query($sql);

$sql = "DELETE
FROM " . SESSIONS_TABLE . "
WHERE session_user_id = '".$userdata['user_id']."'
AND session_id <> '".$userdata['session_id']."'";
$result = mysql_query($sql);


Somit killt bei jedem Seitenaufruf jeder User seine eigenen doppelten Sessions und alle User alle Gastsessions.

Ich habe mich auch mal in der sessions.php umgesehen. Leider bin ich nicht wirklich schlau aus der Geschichte geworden. Optimal wäre natürlich wenn man die so abändern könnte, dass Gäste keine Sessions erzeugen und zwei sessions mit dem gleichen user oder der gleichen IP nicht möglich sind. Damit bin ich aber leider überfordert.