SESSION Problem

Alles rund um Module und Plugins in CONTENIDO 4.9.
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

SESSION Problem

Beitrag von derju » Do 28. Sep 2017, 15:21

Hallo zusammen

ich versuche gerade eine eine Session zu registrieren leider ohne erfolg:

Code: Alles auswählen

   $sess  = new cFrontendSession;
   $captchaspam = randomString(5);  //Die Zahl bestimmt die Anzahl stellen
   $sess->register('captchaspam');
Was mach ich falsch?

LG - derju
Contenido 4.8.20 | Contenido 4.9.12

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: SESSION Problem

Beitrag von homtata » Do 28. Sep 2017, 19:27

Vielleicht....

Code: Alles auswählen

$sess  = new cFrontendSession();
...?

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: SESSION Problem

Beitrag von derju » Do 28. Sep 2017, 20:06

Hat leider auch nicht's gebracht.

Wenn ich $sess mit var_dump aus gebe erhalte ich folgendes

Code: Alles auswählen

object(cFrontendSession)#9 (4) { ["_pt":protected]=> array(4) { ["auth"]=> bool(true) ["encoding"]=> bool(true) ["lang"]=> string(1) "1" ["client"]=> string(1) "1" } ["_prefix":protected]=> string(9) "1frontend" ["id"]=> string(32) "p1nqe9b3244nahcuonk44lnc390demo05" ["name"]=> string(9) "contenido" } 
LG - derju
Contenido 4.8.20 | Contenido 4.9.12

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: SESSION Problem

Beitrag von homtata » Fr 29. Sep 2017, 03:46

Na, dann ist sie doch da. Was genau klappt nicht? Mit dem kurzen Code aus dem ersten Post landet die random-Variable auf jeden Fall nicht im Code, die wird da nirgends an $sess übergeben, denke ich.

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: SESSION Problem

Beitrag von derju » Fr 29. Sep 2017, 07:50

ich versuche captchaspam in der Session zu speichern.

Code: Alles auswählen

   $sess  = new cFrontendSession;
   $captchaspam = randomString(5);  //Die Zahl bestimmt die Anzahl stellen
   $sess->register('captchaspam');
LG - derju
Contenido 4.8.20 | Contenido 4.9.12

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: SESSION Problem

Beitrag von Oldperl » Fr 29. Sep 2017, 10:03

Servus,

von welcher Contenido Version sprechen wir?
In 4.9.12 sollte es so gehen:

Code: Alles auswählen

   $sess  = cRegistry::getSession();
   $captchaspam = randomString(5);  //Die Zahl bestimmt die Anzahl der Stellen
   $sess->register('captchaspam');
Gruß aus Franken

Ortwin
Zuletzt geändert von Oldperl am Fr 29. Sep 2017, 11:51, insgesamt 1-mal geändert.
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: SESSION Problem

Beitrag von derju » Fr 29. Sep 2017, 10:21

Ja das ist die 4.9.12, leider finde ich da nich wenn ich var_dump $sess ausgebe.

LG - derju
Contenido 4.8.20 | Contenido 4.9.12

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: SESSION Problem

Beitrag von Oldperl » Fr 29. Sep 2017, 11:37

Servus,

folgendes funktioniert in einer 4.9

Code: Alles auswählen

function random_string($max = 20) {
    $chars = explode(" ", "a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9");
    for ($i = 0; $i < $max; $i++) {
        $rnd = array_rand($chars);
        $rtn .= base64_encode(md5($chars[$rnd]));
    }
    return substr(str_shuffle(strtolower($rtn)), 0, $max);
}

$sess = cRegistry::getSession();

echo "string before: " . $captchaspam . "<br>";

$captchaspam = random_string();  //Die Zahl bestimmt die Anzahl der Stellen
If (!$sess->isRegistered('captchaspam')) {
    $sess->register("captchaspam");
}

echo "string after: " . $captchaspam . "<br>";
Beim 1. Durchlauf ist "string before" noch leer, da noch nicht in der Session vorhanden. Im 2. Durchlauf steht in "string before" der generierte Wert aus "string after" des 1. Durchlaufs, sprich, der Wert wurde in der Session übergeben.

Gruß aus Franken

Ortwin

PS: Ein schönes Beispiel für mein Entwickler-Buch.
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: SESSION Problem

Beitrag von derju » Mo 2. Okt 2017, 07:52

Hallo Ortwin

Danke für deine Einführung in die Contenido Session.

Leider klappt es bei mir nicht.

Wenn ich $sess = cRegistry::getSession(); in einem Externen File aufrufe (captcha.php) wird es irgend wie $sess nicht gesetzt.
Ich erhalte dan folgende Fehlermeldung:

Code: Alles auswählen

PHP Fatal error:  Uncaught Error: Call to a member function isRegistered()
Das File sieht wie folgt aus und liegt in Mandanten Ordner:

Code: Alles auswählen

<?php

// we need to set constant
if (!defined("CON_FRAMEWORK")) {
    define("CON_FRAMEWORK", true);
}

global $contenido_path, $contenido, $client, $load_client, $file;

// Set path to current frontend
$frontend_path = str_replace('\\', '/', realpath(dirname(__FILE__) . '/')) . '/';
// include security class and check request variables
//include_once ($contenido_path . 'classes/class.security.php');
//Contenido_Security::checkRequests();


/*
* Do not edit this value!
*
* If you want to set a different enviroment value please define it in your .htaccess file
* or in the server configuration.
*
* SetEnv CON_ENVIRONMENT development
*/
if (!defined('CON_ENVIRONMENT')) {
    if (getenv('CONTENIDO_ENVIRONMENT')) {
        $sEnvironment = getenv('CONTENIDO_ENVIRONMENT');
    } elseif (getenv('CON_ENVIRONMENT')) {
        $sEnvironment = getenv('CON_ENVIRONMENT');
    } else {
        // @TODO: provide a possibility to set the environment value via file
        $sEnvironment = 'production';
    }

    define('CON_ENVIRONMENT', $sEnvironment);
}

// Include the config file of the frontend to initialize client and language id
include_once($frontend_path . 'data/config/' . CON_ENVIRONMENT . '/config.php');

// Clients local configuration
if (file_exists($frontend_path . 'data/config/' . CON_ENVIRONMENT . '/config.local.php')) {
    @include($frontend_path . 'data/config/' . CON_ENVIRONMENT . '/config.local.php');
}

// CONTENIDO startup process
if (!is_file($contenido_path . 'includes/startup.php')) {
    die("<h1>Fatal Error</h1><br>Couldn't include CONTENIDO startup.");
}
include_once($contenido_path . 'includes/startup.php');

// start session etc., see phplib for more info
//page_open(array ('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm'));

   function randomString($len) {
      function make_seed(){
         list($usec , $sec) = explode (' ', microtime());
         return (float) $sec + ((float) $usec * 100000);
      }
      srand(make_seed());
      //Der String $possible enthält alle Zeichen, die verwendet werden sollen
      $possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
      $str="";
      while(strlen($str)<$len) {
        $str.=substr($possible,(rand()%(strlen($possible))),1);
      }
   return($str);
   }

   $sess = cRegistry::getSession();
   $captchaspam = randomString(5);  //Die Zahl bestimmt die Anzahl stellen

   If (!$sess->isRegistered('captchaspam')) {
    $sess->register("captchaspam");
     }

   // phplib cleanup
	//page_close();
   $strPath = dirname(__FILE__).'/captcha';

   header('Content-type: image/png');
   $img   = ImageCreateFromPNG($strPath.'/captcha.PNG'); //Backgroundimage
   $color = ImageColorAllocate($img, 125, 125, 125); //Farbe
   $ttf   = $strPath."/Anorexia.ttf"; //Schriftart
   $ttfsize = 26; //Schriftgrösse
   $angle = rand(0,5);
   $t_x = rand(5,10);
   $t_y = 35;
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $captchaspam);
   imagepng($img);
   imagedestroy($img);




?>
LG - derju
Contenido 4.8.20 | Contenido 4.9.12

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: SESSION Problem

Beitrag von Oldperl » Mo 2. Okt 2017, 10:12

Servus,

du solltest deine Session auch starten. Der entsprechende Part in deinem Code ist auskommentiert und offensichtlich noch aus 4.8er Zeiten. Schau mal in die Datei main.php von CONTENIDO 4.9, dort wird das ziemlich zu Beginn mit der bootstrap-Methode der cRegistry beispielhaft gemacht. Und nicht vergessen deinem Script die entsprechende Session-Variable auch zu übergeben beim Aufruf.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: SESSION Problem

Beitrag von derju » Mo 2. Okt 2017, 12:47

hallo Ortwin

Danke!

Was meinst du hiermit, genau?
Und nicht vergessen deinem Script die entsprechende Session-Variable auch zu übergeben beim Aufruf.
LG - derJu
Contenido 4.8.20 | Contenido 4.9.12

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: SESSION Problem

Beitrag von Oldperl » Mo 2. Okt 2017, 13:11

Servus,

je nach Session-Einstellungen kann es sein, dass eine Übergabe der Session-ID notwendig ist. Nutzt man dazu, sprich zur Erstellung der URLs, die Contenido-eigenen Funktionen, so kümmert sich das System darum, ansonsten und bei eigenen URLs oder Querverweisen auf eigene externe Dateien (wie hier wohl angedacht) ist eine Übergabe der Session-ID in der URL zu empfehlen.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: SESSION Problem

Beitrag von derju » Mo 2. Okt 2017, 15:10

Hallo Ortwin,

hast du mir hierfür noch ein Beispiel?

LG - derju
Contenido 4.8.20 | Contenido 4.9.12

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: SESSION Problem

Beitrag von derju » Fr 6. Okt 2017, 08:13

Leider bin ich nicht weiter.

Wenn ich in Captcha.php die Session registriere kann ich sie im Modul nicht abrufen.

Hat jemand eine Idee was da schief läuft?

LG - derju
Contenido 4.8.20 | Contenido 4.9.12

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: SESSION Problem

Beitrag von Oldperl » Fr 6. Okt 2017, 08:22

Servus,
derju hat geschrieben:
Fr 6. Okt 2017, 08:13
Wenn ich in Captcha.php die Session registriere kann ich sie im Modul nicht abrufen.
Kontrollieren, anhand der Session-ID, ob an beiden Stellen die gleiche Session verwendet wird. Ich vermute dir fehlt genau die von mir bereits erwähnte Übergabe der Session und Du arbeitest mit unterschiedlichen Sessions in der externen Datei und deinem Modul.

Ich hatte ähnliche Probleme bei meinem Captcha-Addon-Plugin für den Pifa, was dann in einem Umweg über die DB für das Zwischenspeichern der Captcha-Informationen mit eigener DB-Tabelle führte.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Antworten