Knowledge Base Index -> Server & Technik -> MySQL -> Fehler "phpbb_sessions is full"
Als ersten mal der Artikel hat mir sehr geholfen, ich verwende jetzt die erste Lösung (automatische Erweiterung der Heap Tabelle bzw. löschen der letzten Einträge).
Ich war mit der Lösung allerdings in meinem Fall nicht ganz glücklich und wollte hier aufschreiben warum nicht.
Als erstes möchte ich mal vermuten warum viele dieses Problem haben.
1. Es gibt zu viele Zugriffe von verschiedenen "nicht eingeloggten Benutzern" (halte ich eher für unwarscheinlich für die meisten Foren)
2. Das Forum wird von Suchmaschinen Bots durchsucht wie z.B. google/msn usw. (auf die Mods die man dafür braucht möchte ich hier nicht eingehen, das ist eine andere Baustelle)
Bei mir war es der Punkt 2. und zwar entsteht auch nur genau desshalb ein Problem weil wir die Session-ID's ausblenden für die Bots. Durch das ausblenden der Session-ID's wird die Session nicht wiedererkannt und es wird für jeden Zugriff eine neue Session ID vergeben, die folge davon ist eine volle Session Tabelle. Google macht immerhin 5 Zugriffe die Minute, was bei einer Sessiontime von 60 Min (default bei phpbb2) genau 300 Sessions ergibt. Klicken jetzt noch 20 User auf dem Forum rum oder ist mehr als ein Bot beim durchduchen des Forums sind die 500 bzw. 550 Sessions schnell erreicht und wir haben unseren Fehler "phpbb_sessions is full".
Meine Idee ist es nun die Bots wiederzuerkennen, um die Session Tabelle möglichs klein zu halten. Dies klappt auch sehr gut und zwar ist der Grundgedanke dieser:
Wenn der Benutzer ein Bot ist (vorrausetzung ist die ShowBotsInOnlineList_120_Beta Mod zur Erkennung) kann ich die Session-ID über:
Code: Alles auswählen
$session_id = md5($_SERVER["HTTP_USER_AGENT"]);
In meinen Augen die allerbeste Lösung die das Problem bei der Wurzel packt!
Hier das ganze als Mod (ShowBotsInOnlineList_120_Beta muß installiert sein!)
Code: Alles auswählen
#
#-----[ OPEN ]------------------------------------------
#
include/session.php
#
#-----[ FIND ]------------------------------------------
#
else
{
$sessiondata = array();
$session_id = ( isset($HTTP_GET_VARS['sid']) ) ? $HTTP_GET_VARS['sid'] : '';
$sessionmethod = SESSION_METHOD_GET;
}
#
#-----[ AFTER, ADD ]------------------------------------------
#
if (areyouabot($_SERVER["HTTP_USER_AGENT"], TRUE) == 1) {
$session_id = md5($_SERVER["HTTP_USER_AGENT"]);
}
#
#-----[ FIND ]------------------------------------------
#
$session_id = md5(uniqid($user_ip));
#
#-----[ REPLACE WITH ]------------------------------------------
#
if (areyouabot($_SERVER["HTTP_USER_AGENT"], TRUE) != 1) {
$session_id = md5(uniqid($user_ip));
}
#
#-----[ FIND ]------------------------------------------
#
else
{
$sessiondata = array();
$session_id = ( isset($HTTP_GET_VARS['sid']) ) ? $HTTP_GET_VARS['sid'] : '';
$sessionmethod = SESSION_METHOD_GET;
}
#
#-----[ AFTER, ADD ]------------------------------------------
#
if (areyouabot($_SERVER["HTTP_USER_AGENT"], TRUE) == 1) {
$session_id = md5($_SERVER["HTTP_USER_AGENT"]);
}
#
#-----[ FIND ]------------------------------------------
#
else
{
$session_id = ( isset($HTTP_GET_VARS['sid']) ) ? $HTTP_GET_VARS['sid'] : '';
$sessionmethod = SESSION_METHOD_GET;
}
#
#-----[ AFTER, ADD ]------------------------------------------
#
if (areyouabot($_SERVER["HTTP_USER_AGENT"], TRUE) == 1) {
$session_id = md5($_SERVER["HTTP_USER_AGENT"]);
}
Danke auch nochmal an Leuchte für den sehr guten Artikel Fehler "phpbb_sessions is full"
evtl. kann man das ja irgendwie hinten an den Artikel dranhängen
MfG Niwo