Seite 1 von 1

Anmerkungen zu Knowledge Base-Fehler "phpbb_sessions is

Verfasst: 09.02.2005 14:02
von Niwo
Hi, ich beziehe mich im folgenden auf den Knowledge Base Artikel:
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"]);
erzeugen. Damit erkenne ich die Bots wieder und jeder Bot erhält nur eine Session, wie ein normaler Benutzer!

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"]);
	}
Ich hoffe ich konnte dem einen oder anderem Helfen.

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

Verfasst: 09.02.2005 14:36
von itst
Gute Idee, und auf den ersten Blick fehlerfrei umgesetzt. Danke!

Ich verschiebe das mal nach MOD-Entwicklung, und sobald ein paar Leute ds getestet haben, kannst Du daraus einen richtigen MOD machen.

Verfasst: 12.02.2005 10:51
von ReneDD
Hi,

ich habe es mal getestet. Es tritt ein Fehler auf.

Ich nutze ein Tool um meine Seite nach defekten Links zu checken. Wenn ich die Session Variante von dir nutze erhalte ich ~1800 Links. Wenn ich deine Session Variante deaktiviere erhalte ich ~26000 Links. Das Problem welches Auftritt ist das er nicht in die Beiträge hinein geht. Er geht nie weiter als bis zum Topic Titel.

Nun die Frage, ich habe die Caching Mod für Gäste eingebaut. Die Frage ist die. Liegt es an der Caching Mod? Oder liegt es an der Session Mod. Also ohne Session Mod geht es einwandfrei.

mfG
Rene

Re: Anmerkungen zu Knowledge Base-Fehler "phpbb_sessions is

Verfasst: 05.02.2010 17:50
von Pappmann
Hallo,

habe den Showbotinonlinelist Mod installiert nun wollte ich dieses Script einbauen und stoße nun auf das Problem das ich

Code: Alles auswählen

$session_id = md5(uniqid($user_ip));

nicht finden kann, stattdessen finde ich
z.B.

Code: Alles auswählen

$session_id = md5(dss_rand());
kann ich es dann einfach wie folgt abändern?

Code: Alles auswählen

if (areyouabot($_SERVER["HTTP_USER_AGENT"], TRUE) != 1) {
         $session_id = md5(dss_rand());
      }