Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 03. Mai 2013 12:23

Publisher
probiert CMS/ms aus
Registriert: 07. Januar 2011
Beiträge: 45

Session nicht auf weitere .php Seite übertragbar?

Hallo Miteinander

CMSMS 1.11.5.

Ich bin dabei ein Modul zu programmieren. Also das meiste funktioniert schon, auch die Session Wertübergabe auf andere Seiten.

Session wird erstellt, und kann auch direkt ausgegeben werden auf /modules/modulename/front_get_companys.php

Problem:
Ich erstelle Captcha Bilder mit <img src="/modules/modulename/scripts/captcha.php?id='.$index_company_id.' />
(GET Parameter werden auf captcha.php Problemlos übergeben und kann man darin auch ausgeben)

Aber $_SESSION gibt mir auf captcha.php nur ein leeres Array aus. Warum ist das so?

Inhalt von captcha.php

[== PHP ==]
session_start(); // Ohne session_start(); geht es auch nicht
print_r($_SESSION);

Vielen Dank schon im Voraus für die Antworten.


Bin interessiert an gegenseiteige Hilfe über MSN, Skype oder Google Chat.
Habe fortgeschrittene CMS MS Kenntnisse. Schreibt mir eine PN!  smile

Offline

#2 03. Mai 2013 13:57

czarnowski
kennt CMS/ms
Registriert: 18. Oktober 2012
Beiträge: 457

Re: Session nicht auf weitere .php Seite übertragbar?

captcha.php scheint ein eigenständiges php script zu sein.

Dann aber hat es keinen Zugriff auf andere Sessions.

Man muss in captcha  über  session_name den gleichen Namen wie im Hauptscript definieren.

Offline

#3 04. Mai 2013 15:11

Publisher
probiert CMS/ms aus
Registriert: 07. Januar 2011
Beiträge: 45

Re: Session nicht auf weitere .php Seite übertragbar?

czarnowski schrieb:

captcha.php scheint ein eigenständiges php script zu sein.
Dann aber hat es keinen Zugriff auf andere Sessions.
Man muss in captcha  über  session_name den gleichen Namen wie im Hauptscript definieren.

Hallo czarnowski

Vielen Dank für die Rasche Antwort.

Genau, captcha.php ist eigenständig, aber auf dem gleichen Filehosting.

Das was du gesagt hast habe ich probiert, aber ich erhalte auf der captcha.php immer noch nur eine Leere $_SESSION. Die neue Session Name kann ich auf der captcha.php aber ausgeben.

Ich habe mal die captcha.php als 'action' für das Modul umgeschrieben in action.captcha.php. Somit kann ich als Modulimplemetierung diesen Parameter in der Action angeben {Modulname action='captcha' lang='de_DE'} .
Das captcha File wird nun somit mit dem Modul geöffnet. In dieser Instanz kann man die Session abfangen ohne Probleme.

Damit ich aber ein reines Bild im File erzeugen kann kann muss ich ja header('Content-type: image/png'); angeben, das peilt aber das System nicht in der Modulinstanz.

Kurz zusammengefasst:

action.captcha.php

[== PHP ==]
if(empty($_SESSION)) {
   echo 'session leer';
}
print_r($_SESSION);
echo session_name();

Variante 1: CMS Seite mit Leerem Template (Ohne <header> Tags etc, nur {content} und {process_pagedata} (ohne process_pagedata besteht das Problem immer noch), captcha File aufgerufen mit {Modulname action='captcha' lang='de_DE'}
- Session gefunden, Inhalt wird ausgeprintet
- Session Name: CMSSESSID79b9b1e5
- Wenn man da wo die Session erstellt wird zuoberst session_name('test'); schreibt, wird mit session_name(); das auch so angegeben (funktioniert hier)

Variante 2: PHP File direkt aufgerufen:
- Session leer
- Session Name: PHPSESSID‰
- Wenn man da wo die Session erstellt wird zuoberst session_name('test'); schreibt, wird mit session_name(); das auch so angegeben (funktioniert hier auch, aber Session immer noch leer)

Also habe ich versucht das Captcha Bild mit der 1. Variante zu erzeugen, was aber nicht die langanhaltende Lösung ist, weil man dafür eine CMS Seite extra nur für das erstellen muss.

Bild Code:

[== PHP ==]
$im = imagecreatetruecolor(50, 24);
$bg = imagecolorallocate($im, 22, 86, 165);
$fg = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $bg);
imagestring($im, 5, 5, 5, 'inhalt', $fg);
header("Cache-Control: no-cache, must-revalidate");
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

Bei Variante 1:
Erhalte nur Hyroglyphen etwa so

PNG  IHDR27j9  IDATH   Q   @5:C ,  %x4oч0D7ۤ  =    s d  4 c -  ZTK jIX @     y h0 [   : [cS \ m,  $ ϩ  |;i) ݅< *F `>T"W     ! փ    u    X~}@0; h  !   Y :oY  ߩՒ Z. W3    IEND B`

Bei Variante 2:
Bild wird erstellt.

Dilemma:
Also entweder ich kann die Session übergeben aber kein Bild erstellen, oder ich kann keine Session übergeben aber ein Bild erstellen.

Also liegt bei Variante 1 Höchstwarscheinlich das Problem dass das Content-type nicht geändert werden kann, also habe ich gegoogelt und fand diesen Link http://www.smarty.net/docsv2/de/tips.wap.tpl das erklären soll wie man im Smarty tpl den Content Type definieren kann.
Im Code ergänzt hatte ich dann ledeglich:

[== PHP ==]
echo $this->ProcessTemplate('captcha.tpl');

Im captcha.tpl ergänzte ich noch das gemäss smarty.net Link
Aber ich bekam wieder nur Hyroglyphen rausgespuckt.

Wie könnte man das Dilema lösen?

Vielen Dank schon im Voraus für die Antworten!


Bin interessiert an gegenseiteige Hilfe über MSN, Skype oder Google Chat.
Habe fortgeschrittene CMS MS Kenntnisse. Schreibt mir eine PN!  smile

Offline

#4 04. Mai 2013 16:14

czarnowski
kennt CMS/ms
Registriert: 18. Oktober 2012
Beiträge: 457

Re: Session nicht auf weitere .php Seite übertragbar?

Das Kauderwelsh ist eine png Bilddatei.
Problem besteht in der headerausgabe, da andere header bereits abgeliefert wurden.

Man kann aber ein Image auch als File ablegen
ImagePNG($img, $tempn);
ImageDestroy($img);
@chmod($tempn, 0755);

man muss nur einen $tempn bilden unter dem das Image abgelegt wird und auch ein chmod ausführen sonst hat man das Problem das man es nicht mehr löschen kann.
Dann kann man die Ausgabe als normalen Imagelink ausführen.

Hier als Beispiel mein bewährtes Smarty - Plugin (nicht für Cmsms, aber easy anpassbar oder als Beispiel):

[== php ==]
<?php


function smarty_function_captcha($params, &$smarty) {
    global $config;
    $ctext = isset($params['ctext']) ? $params['ctext'] : ''; // nur zum Test benötigt
    $fontfile = isset($params['fontfile']) ? $params['fontfile'] : $config['root_path'] . '/data/captcha/verdanaz.ttf';
    $fontsize = isset($params['fontsize']) ? $params['fontsize'] : 20;
    $background = isset($params['background']) ? $params['background'] : $config['root_path'] . '/data/captcha/captcha.jpg';
    $yy = 25;
    if ($ctext == '') {
        $TXT = array(
            chr(rand(48, 57)),
            chr(rand(48, 57)),
            chr(rand(48, 57)),
            chr(rand(48, 57)));
        $ctext = "$TXT[0]$TXT[1]$TXT[2]$TXT[3]";
    }

    $i = 0;
    $sl = strlen($ctext);
    while ($i < $sl) {
        $TXT[] = $ctext[$i];
        $i++;
    }


    if (!@session_id())
        @session_start();

    $_SESSION['captchatext'] = $ctext;

    $img = ImageCreateFromJPEG($background);
    $CLR = array(
        ImageColorAllocate($img, 36, 64, 111),
        ImageColorAllocate($img, 75, 111, 55),
        ImageColorAllocate($img, 192, 31, 78),
        ImageColorAllocate($img, 131, 91, 113));
    shuffle($CLR);

    foreach ($TXT as $fk => $val) {
        $xx = $fk * 25 + 7;
        $wk = rand(0, 50) - 25;
        if (isset($CLR[$fk]))
            imagettftext($img, $fontsize, $wk, $xx, $yy, $CLR[$fk], $fontfile, $val);
    }

    $md5ctext = md5($ctext);
    $tempn = "tmp/cache/$md5ctext.png";
    ImagePNG($img, $tempn);
    ImageDestroy($img);
    @chmod($tempn, 0755);

    $smarty->assign('captchatext', $ctext);
    return "<img src='$tempn' alt='Captchacode' width='111' height='33'/><input type='hidden' name='captchamd5'  value='$md5ctext' />";
}

?>

Einsatzbeispiel hier:  http://www.tagungshotels.com/index.php? … sprache=de

Offline

#5 04. Mai 2013 20:46

Publisher
probiert CMS/ms aus
Registriert: 07. Januar 2011
Beiträge: 45

Re: Session nicht auf weitere .php Seite übertragbar?

Hi czarnowski

Das war eine geniale Idee, vielen herzlichen Dank!

Anfangs wollte ich die Bilder mittels src="captcha.php" aufrufen wobei ich die Bildgenerierung eben auslagern musste. Aber mit der Idee das Bild im FTP Abzulegen und dann als zb. src="code.png" abzurufen, musste ich nun das Bildgenerierungs-Script nicht mehr auslagern und hatte Bild und Session in die selbe Datei mit der Restlichen Programmierung.
(Bild Speicherung und abruf habe ich zusätzlich mit md5 verschlüsselt).

Funktioniert wunderbar, danke nochmal vielmals :-)


Bin interessiert an gegenseiteige Hilfe über MSN, Skype oder Google Chat.
Habe fortgeschrittene CMS MS Kenntnisse. Schreibt mir eine PN!  smile

Offline

#6 12. Mai 2013 14:56

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: Session nicht auf weitere .php Seite übertragbar?

Und warum hast du dir nicht einfach eine Instanz des Captcha-Moduls geholt cool ?

Offline

#7 12. Mai 2013 21:12

Publisher
probiert CMS/ms aus
Registriert: 07. Januar 2011
Beiträge: 45

Re: Session nicht auf weitere .php Seite übertragbar?

cyberman schrieb:

Und warum hast du dir nicht einfach eine Instanz des Captcha-Moduls geholt cool ?

Hi cyperman

Hatte ich versucht, aber nicht hingekriegt. Wie soll ich dabei am besten vorgehen?

Ich habe einfach geschaut wie es im Guestbook Modul implementiert ist (Im Captcha-Modulhilfe stand dass das Guestbook Modul das Captcha-Modul unterstützt), aber es sah mir zu aufwändig aus es für mein Modul zu übersetzen.

Beitrag geändert von Publisher (12. Mai 2013 21:13)


Bin interessiert an gegenseiteige Hilfe über MSN, Skype oder Google Chat.
Habe fortgeschrittene CMS MS Kenntnisse. Schreibt mir eine PN!  smile

Offline

#8 19. Mai 2013 18:47

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: Session nicht auf weitere .php Seite übertragbar?

Ist kein großer Voodoo - eine Instanz des Captcha-Moduls holst du dir so

    $captcha = cms_utils::get_module('Captcha');

So holst du dir den eingegebenen Captcha-Wert

    if( is_object($captcha ) )
    {
      if (!empty($_POST['captcha_resp'])) { $captcha_resp = $_POST['captcha_resp']; }
    }

Und so sieht die Auswertung aus

    if( is_object($captcha ) )
    {
      if (empty($captcha_resp)) $errors .= "\t\t<li>" . 'Bitte geben Sie den Text ein, der im Bild angezeigt wird' . "</li>\n";
      elseif (! ($captcha->checkCaptcha($captcha_resp))) $errors .= "\t\t<li>" . 'Ihre Eingabe stimmt nicht mit dem Text aus dem Bild überein.' . "</li>\n";
    }

So funktioniert es zumindest in der von mir weitergepflegten Version des {contact_form} Plugins

http://cmsms-mods.googlecode.com/files/ … 1.6-DE.zip

Offline