Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Session callback expects true/false return value in File: sessions.php Line: 118

    christianwagner

    • Mitglied
    • Beiträge: 135
    Guten Tag,

    Neueste modified 2.x Version.
    PHP 7.0
    MySqLi.
    In der configure steht bei Session speichern: mysql
    Server hat session.use_only_cookies = off

    Ich bekomme immer wieder diese Fehlermeldung im Error Log

    Code: PHP  [Auswählen]
    [01-02-2017 21:28:33] E_WARNING : LoggingManager: session_start(): Session callback expects true/false return value in File: /home/www/web/html/test/includes/functions/sessions.php on Line: 118
    [01-02-2017 21:28:33] E_WARNING : LoggingManager: Backtrace #0 - /home/www/web/html/test/includes/modules/set_session_and_cookie_parameters.php called at Line 80
    [01-02-2017 21:28:33] E_WARNING : LoggingManager: Backtrace #1 - /home/www/web/html/test/includes/application_top.php called at Line 263
    [01-02-2017 21:28:33] E_WARNING : LoggingManager: Backtrace #2 - /home/www/web/html/test/index.php called at Line 25

    Ich finde auch sporadisch session files im Ordner /phptmp mit einer Größe von 0

    Weiß jemand was ich machen muss?

    Habe jetzt mal session.use_only_cookies auf on gesetzt

    Gruss
    Chris

    Linkback: https://www.modified-shop.org/forum/index.php?topic=36561.0

    Andreas Kroll

    • Fördermitglied
    • Beiträge: 249
    • Geschlecht:
    Hallo Christian

    Hast Du eine Lösung für Dein Problem gefunden?
    Bei mir tritt der gleiche Hinweis auf und ich komme da nicht weiter.

    mfg
    Andreas

    christianwagner

    • Mitglied
    • Beiträge: 135
    Habe mich damit nicht mehr beschäftigt. Ich weiß auch nicht ob die Meldungen die Funktionsweise des Shops beeinträchtigen. Im Frontend habe ich im Testmodus nix negatives feststellen können.

    Läuft bei Dir der Shop unter Last mit Kunden oder so wie bei mir im Testmodus mit mir als einzigen Kunden?

    Bist Du zufällig bei Canhost als Provider?

    Gruss
    Chris

    Andreas Kroll

    • Fördermitglied
    • Beiträge: 249
    • Geschlecht:
    Läuft bei normal und nicht im Testbetrieb.
    Mein Provider ist all-inkl.com

    mfg
    Andreas

    viza

    • Mitglied
    • Beiträge: 113
    • Geschlecht:
    Hi!

    Hintergrund für den Log-Eintrag ist der an die function session_set_save_handler übergebene read-Handler.
    Hier wird nicht ein true oder false zurückgegeben wie erwartet.

    Zu finden:

    includes/functions/sessions.php

    Code: PHP  [Auswählen]
        function _sess_read($key) {
          $value_query = xtc_db_query("SELECT value
                                         FROM "
    . TABLE_SESSIONS . "
                                        WHERE sesskey = '"
    . xtc_db_input($key) . "'
                                          AND expiry > '"
    . time() . "'");
          if (xtc_db_num_rows($value_query) == 1) {
            $value = xtc_db_fetch_array($value_query);

            if (isset($value['value']) && $value['value'] != '') {
              return base64_decode($value['value']);
            }
          }
         
          return '';
        }

    Problem ist hier das return '';.

    Ich hab das bei mir mit return false; ausgetauscht. Der Fehler verschwindet und ich hab noch kein negatives Verhalten feststellen können.

    Die Frage stellt sich mir gerade, ob in der Funktion _sess_gc:

    Code: PHP  [Auswählen]
        function _sess_gc($maxlifetime) {
          if (DELETE_GUEST_ACCOUNT == 'true') {
            $session_query = xtc_db_query("SELECT sesskey,
                                                  value
                                             FROM "
    . TABLE_SESSIONS . "
                                            WHERE expiry < '"
    . time() . "'");

    ...

          xtc_db_query("DELETE FROM " . TABLE_SESSIONS . " WHERE expiry < '" . time() . "'");
         
          return xtc_db_affected_rows();
        }

    das return xtc_db_affected_rows(); nicht auch gegen ein return true; ausgetauscht werden kann. Ich versuch das mal....

    viza

    • Mitglied
    • Beiträge: 113
    • Geschlecht:
    Hmmm, ich hab nochmal recherchiert und den Rückgabewert der _sess_read Funktion wieder auf
    return ''; gesetzt. Grund: die originäre Funktion read liefert auch entweder bei Erfolg einen String mit Daten oder leeren String zurück.

    Der GC-Handler (PHP-Standard) erwartet hingegen entweder true oder false zurück.

    Ergo:

    Funktion _sess_read in der sessions.php wieder zurückgeändert (wie oben geschrieben).
    Funktion _sess_gc in der sessions.php wie beschrieben auf return true; gesetzt.

    Es wird kein Log-Eintrag mehr mit der Warnung gesetzt.

     :-)

    web28

    • modified Team
    • Beiträge: 9.404
    in _sess_write steht das hier:

    Code: PHP  [Auswählen]
    if (xtc_db_affected_rows() > 0) {
            return true;
          }
     
          return false;

    Das könnte man doch genauso in _sess_gc umsetzen.

    Gruss Web28

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.225
    • Geschlecht:
    Zitat
    Return value should be TRUE for success, FALSE for failure.

    Heisst wir müssen immer TRUE zurückgeben.

    Habe es bereits im SVN korrigiert.

    Gruss Gerhard

    viza

    • Mitglied
    • Beiträge: 113
    • Geschlecht:
    ... so sehe ich das auch!
     :-)

    Andreas Kroll

    • Fördermitglied
    • Beiträge: 249
    • Geschlecht:
    Hallo GTB

    Kannst Du mir bitte kurz mitteilen was ich jetzt genau in welcher Datei ändern soll damit die Fehlermeldung wegbleibt?

    mfg
    Andreas
               
    anything