Zugriff von cSession auf das PHP Session System

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
mikesteiner99
Beiträge: 93
Registriert: Mi 12. Aug 2009, 11:01
Wohnort: Au, Zürich
Kontaktdaten:

Zugriff von cSession auf das PHP Session System

Beitrag von mikesteiner99 » Mo 10. Feb 2014, 13:57

Hallo Community
Hat schon mal jemand versucht aus einem Contenido Modul auf das Session System von PHP zuzugreifen? Wenn zum Beispiel in einem externen PHP Script mit einem Image Header (<img src="image.php"</img>) eine normale $_SESSION geschrieben wird habe ich keinen Zugriff aus Contenido cSession da drauf. Gibt es einen Workaround um dies zu bewerkstelligen?
Grüsse aus Züri

xmurrix
Beiträge: 3147
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Zugriff von cSession auf das PHP Session System

Beitrag von xmurrix » Mo 10. Feb 2014, 21:45

Hallo mikesteiner99,

die Frontendsession von CONTENIDO hat einen eigenen Sessionnamen, du musst diesen Namen als "namespace" verwenden, um Sessiondaten zwischen CONTENIDO und deiner image.php auszutauschen.

Nehmen wir an, deine image.php liegt im Mandantenverzeichnis "cms", dann solltest du darin am Anfang CONTENIDO initialisieren, z. B. mit folgendem Code:

Code: Alles auswählen

<?php

$cmsDir = str_replace('\\', '/', realpath(dirname(__FILE__) . '/'));

if (!defined('CON_FRAMEWORK')) {
    define('CON_FRAMEWORK', true);
}

global $contenido_path, $cfg;

// Set path to current frontend
$frontend_path = $cmsDir . '/';

/*
 * 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');

// 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');

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

// Frontend
cRegistry::bootstrap(array(
    'sess' => 'cFrontendSession',
));

// Check if session already started...
if (!session_id()) {
    session_start();
}


// Hier dein Code...

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

mikesteiner99
Beiträge: 93
Registriert: Mi 12. Aug 2009, 11:01
Wohnort: Au, Zürich
Kontaktdaten:

Re: Zugriff von cSession auf das PHP Session System

Beitrag von mikesteiner99 » Di 11. Feb 2014, 15:30

Hallo xmurrix

Danke für Deine Antwort. Trotzdem steh ich auf dem Schlauch. Das CONTENIDO initialisieren ist mir bekannt. Nur werden bei Deinem Beispiel keine Sessions gespeichert. Verwende ich an Deinen Code angefügt folgende Zeilen:

Code: Alles auswählen

$myVar = 58;
if($sess->isRegistered('myVar')) {
  echo "myVar = " . $myVar . " ist bereits gespeichert.";
} else {
  $sess->register('myVar');
  echo "myVar = " . $myVar . " wurde in der Session gespeichert.";
}
erhalte ich nie die Antwort: wurde in der Session gespeichert. Erstelle ich ein Modul innerhalb von Contenido funktioniert dies einwandfrei.

mikesteiner99
Beiträge: 93
Registriert: Mi 12. Aug 2009, 11:01
Wohnort: Au, Zürich
Kontaktdaten:

Re: Zugriff von cSession auf das PHP Session System

Beitrag von mikesteiner99 » Di 11. Feb 2014, 15:39

Hoberla ... habs herausgefunden.
Starts the session and rebuilds the variables
LÖSUNG:

Code: Alles auswählen

$sess->start();
hat im externen Code am Ende gefehlt. Irgendwie logisch. :idea: :lol:

mikesteiner99
Beiträge: 93
Registriert: Mi 12. Aug 2009, 11:01
Wohnort: Au, Zürich
Kontaktdaten:

Re: Zugriff von cSession auf das PHP Session System

Beitrag von mikesteiner99 » Sa 13. Sep 2014, 15:05

Hallo xmurrix

Noch eine Frage hierzu: Weist Du grad aus dem Stehgreif, welche Zeile ergänzt werden müsste, um auch auf die Modul-Übersetzungen zugreifen zu können?

Es Grüsst, Mike
xmurrix hat geschrieben:Hallo mikesteiner99,

die Frontendsession von CONTENIDO hat einen eigenen Sessionnamen, du musst diesen Namen als "namespace" verwenden, um Sessiondaten zwischen CONTENIDO und deiner image.php auszutauschen.

Nehmen wir an, deine image.php liegt im Mandantenverzeichnis "cms", dann solltest du darin am Anfang CONTENIDO initialisieren, z. B. mit folgendem Code:

Code: Alles auswählen

<?php

$cmsDir = str_replace('\\', '/', realpath(dirname(__FILE__) . '/'));

if (!defined('CON_FRAMEWORK')) {
    define('CON_FRAMEWORK', true);
}

global $contenido_path, $cfg;

// Set path to current frontend
$frontend_path = $cmsDir . '/';

/*
 * 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');

// 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');

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

// Frontend
cRegistry::bootstrap(array(
    'sess' => 'cFrontendSession',
));

// Check if session already started...
if (!session_id()) {
    session_start();
}


// Hier dein Code...

Gruß
xmurrix

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Re: Zugriff von cSession auf das PHP Session System

Beitrag von malsdgtac » So 18. Dez 2016, 15:22

Hallo,

ich stehe dazu leider auch auf dem Schlauch. Ich will eigentlich was ganz einfaches: in einem Modul will ich die Variable $_SESSION['merkliste'] befüllen und in einem anderem Modul auslesen. Funktioniert aber wie unter 4.8 leider nicht. Kann mir jemand ein Codebeispiel posten? Ich wäre euch voll dankbar.

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

Re: Zugriff von cSession auf das PHP Session System

Beitrag von homtata » So 18. Dez 2016, 23:42

smac, bitte keine Doppelposts! Du hast zu dieser Frage bereits einen eigenen Thread eröffnet. Wenn du nicht weiterkommst, dann poste bitte dort, was du versuchst, und erste Anleitungsschritte sind dort bereits auch genannt.
LG

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Re: Zugriff von cSession auf das PHP Session System

Beitrag von malsdgtac » Mo 19. Dez 2016, 08:26

Sorry, ich poste meine Antwort dort.

Antworten