Anmerkungen zu Knowledge Base-Fehler "phpbb_sessions is

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Niwo
Mitglied
Beiträge: 5
Registriert: 01.12.2004 18:27
Wohnort: Hamburg
Kontaktdaten:

Anmerkungen zu Knowledge Base-Fehler "phpbb_sessions is

Beitrag 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
Benutzeravatar
itst
Ehrenadmin
Beiträge: 7418
Registriert: 21.08.2001 02:00
Wohnort: Büttelborn bei Darmstadt
Kontaktdaten:

Beitrag 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.
Sascha A. Carlin,
phpBB.de Ehrenadministrator
:o
ReneDD
Mitglied
Beiträge: 82
Registriert: 22.07.2004 21:36

Beitrag 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
Pappmann
Mitglied
Beiträge: 21
Registriert: 17.01.2008 14:07

Re: Anmerkungen zu Knowledge Base-Fehler "phpbb_sessions is

Beitrag 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());
      }
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“