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
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