Modify

Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#1796 closed Bug/Fehler (invalid)

Text für Festlegung der Speicherzeit in whosonline

Reported by: noRiddle Owned by: somebody
Priority: normal Milestone:
Component: Admin Version: 2.0.5.0
Keywords: Cc:
Blocked By: Blocking:

Description

Im Beschreibungstext der Konfig.-Einstellung WHOS_ONLINE_TIME_LAST_CLICK, WHOS_ONLINE_TIME_LAST_CLICK_DESC in /lang/SPRACHE/admin/configuration.php, wird gesagt "(min. Wert: 900)".
Da ist nicht (mehr) korrekt, da im Code /inc/xtc_update_whos_online.inc.php der Default Wert vor der Definition als Wert der genannten Konstanten geschieht und somit der Default-Wert überschrieben wird:

    $time_last_click = 900;
    if (defined('WHOS_ONLINE_TIME_LAST_CLICK')) {
      $time_last_click = (int)WHOS_ONLINE_TIME_LAST_CLICK;
    }

Es gibt auch keine Einschränkung à la

if(WHOS_ONLINE_TIME_LAST_CLICK < $time_last_click) {...

Wenn der Text eine Empfehlung sein soll sollte man die Erklärung mitliefern.

Gruß,
noRiddle

Attachments (0)

Change History (6)

comment:2 by noRiddle, 6 years ago

Wieso "Erweiterung" ? Der Text ist schlicht verkehrt.

Ich hätte noch eine Ergänzung zu machen die dann allerdings eine (imho sinnvolle) Erweiterung wäre:
In /inc/xtc_check_agent.inc.php gibt's 'ne hard-codierte Liste mit Suchmaschinen-Agents, die Funktion gibt allerdings einen Boolean, 1 oder 0 zurück.
Es wäre jedoch gut wenn man den Namen der Maschine im Backend bei whosonline sehen könnte, anstelle des unspezifischen [Suchmaschine].
Dafür könnte man der Funktion schlicht einen Parameter geben der den Default false hat, wenn er jedoch true ist anstelle des Booleans den Namen des Agents ausgibt.
Dann könnte man in der /inc/xtc_update_whos_online.inc.php mittels xtc_check_agent(true) den Namen des Agents holen.

Beispiel:

function xtc_check_agent($name = false) { //new parameter, noRiddle
    ....

    for ($i=0, $n=count($Robots); $i<$n; $i++) {
      if (strstr($botID, $Robots[$i]) || strstr($botID2, $Robots[$i])) {
          if($name === true) {
              return $Robots[$i];
          } //new if-clause, noRiddle

          return 1;
      }
    }
    
    ....
}

und in xtc_update_whos_online.inc.php

      $crawler = xtc_check_agent(true); //added new parameter, noRiddle
      if ($crawler !== 0) {
        $wo_full_name = '['.TEXT_SEARCH_ENGINE_AGENT.'] ('.$crawler.')'; //added crawler name, noRiddle
      } else {
        $wo_full_name = TEXT_GUEST;
      }

Gruß,
noRiddle

Version 0, edited 6 years ago by noRiddle (next)

comment:3 by Torsten Riemer, 6 years ago

Milestone: modified-shop-2.0.5.1
Version: 2.0.5.0

comment:4 by noRiddle, 6 years ago

...und wo wir gerade dabei sind, könnte man strstr auch noch gegen das schnellere strpos ersetzen:
Zitat PHP-Manual:
"Wenn Sie nur herausfinden möchten, ob ein bestimmter needle innerhalb von haystack vorkommt, verwenden Sie stattdessen die schnellere und weniger speicherintensive Funktion strpos()."

Also anstatt

if (strstr($botID, $Robots[$i]) || strstr($botID2, $Robots[$i])) {

das

if (strpos($botID, $Robots[$i]) !== false || strpos($botID2, $Robots[$i]) !== false) {

Gruß,
noRiddle

comment:5 by Gerhard Waldemair, 6 years ago

Milestone: modified-shop-2.0.5.1
Resolution: invalid
Status: newclosed

Hast du den Wert schon mal auf unter 900 gesetzt ? Wird nicht gehen, denn das ist in der configuration_limits.php definiert.

    $time_last_click = 900;
    if (defined('WHOS_ONLINE_TIME_LAST_CLICK')) {
      $time_last_click = (int)WHOS_ONLINE_TIME_LAST_CLICK;
    }

Dieser Code Block ist nur ein Fallback falls in der DB der Eintrag noch nicht existiert.

comment:6 by anonymous, 6 years ago

Ah, ich sehe du hast tieferen Einblick in die Code-Zusammenhänge als meine Wenigkeit.
Allerdings frage ich mich dann warum es deisen Min.-Wert gibt. 15 Min. ist lang.
Ich hatte letzt bei einem User einen Angriff in Richtung DDoS, wurde als Suchmaschine "identifiziert", und der User hätte gerne bei whos_online gesehen wer sich da rumtreibt. Wenn die Einträge allerdings 15 Min. drinbleiben ist das nicht besonders informativ. Warum soll der Shop-Betreiber das nicht runterstellen können (z.B. bis auf 1 Min.) ?

  1. Was hälst du von meinen anderen Vorschlägen hier ?
  2. Es gibt ein neues Problem bzgl. whos_online: "Deadlock found when trying to get lock; try restarting transaction", siehe dazu bitte hier: 1213 - Deadlock found...
    Soll ich dazu ein neues Ticket aufmachen ?

Gruß,
noRiddle

comment:7 by Gerhard Waldemair, 6 years ago

Für einen DDoS Angriff ist eine whos online ungeeignet. Das ist Serversache und nicht Shop.
Für einen Shopbetreiber ist es interessanter zu sehen, wer in den letzten 15min online war.

zu 1. das haben wir bereits umgesetzt.
zu 2. da darfst du gerne ein Ticket erstellen

Modify Ticket

Action
as closed The owner will remain somebody.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.