Jump to content
InvisionCommunity.de - Der Deutsche Invision Community Support
Sign in to follow this  
Anderl72

Googlebot verursacht Datenbankfehler - bug?

Recommended Posts

Hallo Ibpsupport,

Lange habe ich mich nicht blicken lassen, ich wünsche allen noch ein gutes 2005 :)

Nun betreibe ich eine Webseite für behinderte Menschen, die als Motor das Invisionboard 1.2 verwendet. Die Webseite besteht seit ungefähr einem Jahr und wird immer populärer :D

Der Googlebot kommt täglich und indiziert mehrer Seiten. Dabei tritt folgender Fehler auf:

mySQL query error: INSERT INTO ibf_sessions (id,member_name,member_id,member_group,in_forum,in_topic,login_type,running_time

location,ip_address,browser) VALUES('google_session','GoogleBot','0','2','0','0','','1107994105','Bildergalerie,,03','66.249.65.41','Mozilla/5.0 (compatible; Googlebot/2.1; +http://ww')

mySQL error: Duplicate entry 'google_session' for key 1

mySQL error code:

Date: Thursday 10th of February 2005 01:08:27 AM

Wenn man mal GOGGLED, scheint es so als sei ich nicht der einzige Mit diesem Problem und könnte ein Bug sein, dass speziell durch den Googlebot hervorgerufen wird. Auch ist IPBSUPPORT von diesem Bug?! betroffen :D

Meines Erachtens lässt das Board nur EINE google Session zu ????? und deshalb tritt der Fehler auf?

Das Problem scheint mir hier in der functions.php zu liegen:

    function create_bot_session($bot)

    {

        global $DB, $INFO, $std, $ibforums;


        $db_str = $DB->compile_db_insert_string(

                                                                                         array(

                                                                                                         'id'           => $bot.'_session',

                                                                                                         'member_name'  => $ibforums->vars['sp_'.$bot],

                                                                                                                'member_id'    => 0,

                                                                                                                'member_group' => $ibforums->vars['spider_group'],

                                                                                                                'in_forum'     => intval($ibforums->input['f']),

                                                                                                                'in_topic'     => intval($ibforums->input['t']),

                                                                                                                'login_type'   => $ibforums->vars['spider_anon'],

                                                                                                                'running_time' => $this->time_now,

                                                                                                                'location'     => $ibforums->input['act'].",".$ibforums->input['p'].",".$ibforums->input['CODE'],

                                                                                                                'ip_address'   => $this->ip_address,

                                                                                                                'browser'      => $this->user_agent,

                                                                                                          )

                                                                                          );


                $DB->query("INSERT INTO ibf_sessions ({$db_str['FIELD_NAMES']}) VALUES({$db_str['FIELD_VALUES']})");


    }

Wenn es eine google_session gibt, erlaubt das Board keine neue. Nun muss ich das Board dazu bringen entweder die Alte zu updaten oder eine Neue zu generieren? Wer hat Vorschläge zur Lösung des Problems?

Das Problem tritt übrigens auch in der version 1.3 auf :D

Schönen Tag wünscht

Anderl72

Edited by Anderl72

Share this post


Link to post

Okay, ein kleiner Workaround, der funktionieren sollte. Ist vielleicht nicht die schönste Art und Weise, ggf. schau ich später nochmal, aber da ich gerade von einer Klausur komme und nicht mehr ganz so fit im Kopf bin, muß das genügen. ;)

Unterhalb von

    function create_bot_session($bot)
  {
      global $DB, $INFO, $std, $ibforums;
folgendes einfügen
$DB->query("DELETE FROM ibf_sessions WHERE id = '".$bot."_session'");

Erhöht die Anzahl der Queries bei einer neuen Bot Session um eins, aber es dürften keine Duplikate mehr vorkommen.

Share this post


Link to post

Stefan,

das du anderen hilfst wärend du klausuren schreibst, davor ziehe ich meinen hut. ich weiss aus eigener erfahrung wie angespannt man da ist :D Ich wünsche auf jedenfall viel glück.

Mit deinem workaround schmeisse ich jeden bot doch runter von der seite, oder nicht? Bots muss man willkommen heissen :D

Ich habe als workaround rand(1,1000) an das dupplikate Feld angehängt :D Gestern hatte ich kurzfristig über 150 GoogleBot Sessions :D :D :D (Achtung Trafficlastig !!!) Die sind kurz mal über die Seite hergefallen :D :D Mal guggen wie das gespiderte Ergebnis wird.

Anderl

Share this post


Link to post

Also ich kam von einer Klausur, also war es nicht ganz so schlimm. ;)

Bei meiner Lösung werden nicht alle Bot Session gelöscht, sondern nur die von dem jeweiligen betroffenden Bot. Soll bedeutet, wenn das Forum nicht realisiert, das es schon einen Eintrag in der ibf_sessions für den jeweiligen Bot hat und versucht einen neuen einzutragen, werden vorher ggf. vorhandene Einträge des Bots gelöscht. Mehr nicht. :)

Die ID innerhalb der Tabelle soll ja eindeutig sein. Bei einem Google Bot wird dort als Id google_session eingetragen. Will das Forum nun erneut einen Google Bot eintragen, dann würde er wieder die gleiche ID nehmen, die ja schon vergeben ist und somit kommt besagte Fehlermeldung. Mein Statement löscht ggf. den schon vorhandenen Eintrag mit der Id google_session und schon kann das Forum seinen neuen Eintrag hinzufügen.

Normalerweise sollte das Forum jedoch erkennen, das es schon eine Session mit dem Bot hat, was ich mir aber vorstellen kann, ist das das Problem vorkommt, wenn noch ein unbekannter Bot zur gleichen Zeit auftaucht, denn den deklariert das Forum auch als Google Bot.

Kann es aber im Moment nicht mit Sicherheit sagen, da meine Behauptungen über die Ursache rein aus dem Gedächtnis stammenden Quelltext beruhen, denn ich hab gerade keinen Einsicht in die Forensoftware. Ggf. schau ich später mal nach. ;)

Bots selber schmeißt du aber mit meinem Workaround nicht vom Forum, denn sie bekommen einfach eine neue Session wenn sie weiter gehen, falls das Forum nicht realisiert, das es sich um den gleichen Bot handelt. :)

Share this post


Link to post

So, ich hab nun mal in den Sourcen des Forums geschaut. Normalerweise wird genau das, was ich in meinem Workaround beschrieben habe, schon vor dem Aufruf der Methode create_bot_session durchgeführt.

Schau mal in deiner functions.php, ob du folgende Zeilen hast:

          if ( $ibforums->vars['spider_active'] )
         {
         $DB->query("DELETE FROM ibf_sessions WHERE id='".$agent."_session'");

         $this->create_bot_session($agent);
         }

Wo ich das gerade sehe, frag ich mich, warum Matt das in eine seperaten If Anweisung gepackt hat und vorallem nicht direkt in seine Create Methode, so wie bei meinem Workaround. ;)

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×