Seite 1 von 2

SESSION Problem

Verfasst: Do 28. Sep 2017, 15:21
von derju
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

Re: SESSION Problem

Verfasst: Do 28. Sep 2017, 19:27
von homtata
Vielleicht....

Code: Alles auswählen

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

Re: SESSION Problem

Verfasst: Do 28. Sep 2017, 20:06
von derju
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

Re: SESSION Problem

Verfasst: Fr 29. Sep 2017, 03:46
von homtata
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.

Re: SESSION Problem

Verfasst: Fr 29. Sep 2017, 07:50
von derju
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

Re: SESSION Problem

Verfasst: Fr 29. Sep 2017, 10:03
von Oldperl
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

Re: SESSION Problem

Verfasst: Fr 29. Sep 2017, 10:21
von derju
Ja das ist die 4.9.12, leider finde ich da nich wenn ich var_dump $sess ausgebe.

LG - derju

Re: SESSION Problem

Verfasst: Fr 29. Sep 2017, 11:37
von Oldperl
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.

Re: SESSION Problem

Verfasst: Mo 2. Okt 2017, 07:52
von derju
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

Re: SESSION Problem

Verfasst: Mo 2. Okt 2017, 10:12
von Oldperl
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

Re: SESSION Problem

Verfasst: Mo 2. Okt 2017, 12:47
von derju
hallo Ortwin

Danke!

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

Re: SESSION Problem

Verfasst: Mo 2. Okt 2017, 13:11
von Oldperl
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

Re: SESSION Problem

Verfasst: Mo 2. Okt 2017, 15:10
von derju
Hallo Ortwin,

hast du mir hierfür noch ein Beispiel?

LG - derju

Re: SESSION Problem

Verfasst: Fr 6. Okt 2017, 08:13
von derju
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

Re: SESSION Problem

Verfasst: Fr 6. Okt 2017, 08:22
von Oldperl
Servus,
derju hat geschrieben: Fr 6. Okt 2017, 08:13Wenn 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