Back to top

Autore Topic: sessioni  (Letto 1473 volte)

Offline lory22

  • Nuovo arrivato
  • *
  • Post: 12
    • Mostra profilo
sessioni
« il: 09 Giu 2011, 14:00:14 »
qualcuno sa dirmi dove sto sbagliando con il codice di questo captcha.... non visualizza le lettere e penso sia un problema di passaggio della variabile di sessione...
vi posto il codice:

<?php
$session =& JFactory::getSession();

if (empty($session->get('rand_code'))){
$str = "";
$length = 0;
$caratteri = "abcdefghijkmnpqrstuvwxyz123456789";  /* Caratteri che appaiono come immagine */
for ($i = 0; $i < 5; $i++){          /* il 5 indica il numero di caratteri-immagine che appaiono */
$str .= $caratteri{rand(0,34)};
}
$session->set('rand_code', $str);
//$_SESSION['rand_code'] = $str;
echo $str;
}
$imgX = 60;//Sposta a dx i caratteri-immagine
$imgY = 18;//Sposta in alto i caratteri-immagine
$image = imagecreatetruecolor(60, 20);
$backgr_col = imagecolorallocate($image, 238,239,239);//Colore di sfondo
$border_col = imagecolorallocate($image, 208,208,20);//Colore del bordo
$text_col = imagecolorallocate($image, 46,60,31);//Colore dei caratteri-immagine
 
imagefilledrectangle($image, 0, 0, 60, 20, $backgr_col);//Cambiando i 4 valori appare un'ombra nera e si può creare un'effetto rilievo o incassato del rettangolo 
imagerectangle($image, 0, 0, 59, 19, $border_col);// Sposta il bordino colorato del rettangolo

$font = "monofont.ttf";
$font_size = 14;//Dimensione dei caratteri-immagine
$angle = 0;//Ruota obliqui i caratteri-immagine
$box = imagettfbbox($font_size,$angle,$font,$session->get('rand_code'));
$x = (int)($imgX - $box[4]) / 2;//Sposta a sx i caratteri-immagine
$y = (int)($imgY - $box[5]) / 2;//Sposta in alto i caratteri-immagine
imagettftext($image,$font_size,$angle,$x,$y,$text_col,$font,$session->get('rand_code'));

header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy ($image);
 
//Fine Captca-image
//require_once 'indexcaptcha.php';
?>

mau_develop

  • Visitatore
Re:sessioni
« Risposta #1 il: 09 Giu 2011, 14:29:37 »
ci sono le librerie grafiche di php sul server?

M.

Offline dazo

  • Esploratore
  • **
  • Post: 169
    • Mostra profilo
Re:sessioni
« Risposta #2 il: 09 Giu 2011, 14:55:51 »
Codice: [Seleziona]
$font = "monofont.ttf";
??? e questo dove lo hai messo ???? manca il path assoluto


Codice: [Seleziona]
header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy ($image);

In teoria giusto, ma se per qualche motivo c'è un warning ti salta l'immagine prima pulisci il tutto

Citazione
ob_clean();

per ultimo per mia abitudine non uso

Codice: [Seleziona]
if (empty($session->get('rand_code'))){
quindi basta che tu sia sicuro che restituisce true  quando è vuoto

per il resto il codice mi sembra corretto



Web Agency Roma
Web designer Seo

Offline lory22

  • Nuovo arrivato
  • *
  • Post: 12
    • Mostra profilo
Re:sessioni
« Risposta #3 il: 09 Giu 2011, 17:51:28 »
le librerie grafiche ci sono .....
per il resto ho provato ma nulla, posto il codice che aveva le sessioni non richiamate con joomla

<?php
//Captca-image
session_start();

if (empty($_SESSION['rand_code'])){
$str = "";
$length = 0;
$caratteri = "abcdefghijkmnpqrstuvwxyz123456789";  /* Caratteri che appaiono come immagine */
for ($i = 0; $i < 5; $i++){          /* il 5 indica il numero di caratteri-immagine che appaiono */
$str .= $caratteri{rand(0,34)};
}
$_SESSION['rand_code'] = $str;
}
$imgX = 60;//Sposta a dx i caratteri-immagine
$imgY = 18;//Sposta in alto i caratteri-immagine
$image = imagecreatetruecolor(60, 20);
$backgr_col = imagecolorallocate($image, 238,239,239);//Colore di sfondo
$border_col = imagecolorallocate($image, 208,208,20);//Colore del bordo
$text_col = imagecolorallocate($image, 46,60,31);//Colore dei caratteri-immagine
 
imagefilledrectangle($image, 0, 0, 60, 20, $backgr_col);//Cambiando i 4 valori appare un'ombra nera e si può creare un'effetto rilievo o incassato del rettangolo 
imagerectangle($image, 0, 0, 59, 19, $border_col);// Sposta il bordino colorato del rettangolo

$font = "monofont.ttf";
$font_size = 14;//Dimensione dei caratteri-immagine
$angle = 0;//Ruota obliqui i caratteri-immagine
$box = imagettfbbox($font_size,$angle,$font,$_SESSION['rand_code']);
$x = (int)($imgX - $box[4]) / 2;//Sposta a sx i caratteri-immagine
$y = (int)($imgY - $box[5]) / 2;//Sposta in alto i caratteri-immagine
imagettftext($image,$font_size,$angle,$x,$y,$text_col,$font,$_SESSION['rand_code']);

header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy ($image);
 
//Fine Captca-image
//require_once 'indexcaptcha.php';
?>

ho provato a utilizzare il jfactory di joomla ma evidentemente ho sbagliato qualcosa,

Offline dazo

  • Esploratore
  • **
  • Post: 169
    • Mostra profilo
Re:sessioni
« Risposta #4 il: 09 Giu 2011, 19:19:53 »
ma adesso ti funziona?
Web Agency Roma
Web designer Seo

Offline 56francesco

  • Fuori controllo
  • *
  • Post: 29585
  • Sesso: Maschio
    • Mostra profilo
Re:sessioni
« Risposta #5 il: 10 Giu 2011, 09:28:08 »
Citazione
non visualizza le lettere

potrebbe essere  un problema di server, lo so perchè per imprudenza e in seguito ad un malinteso con l'assistenza si è creata la stessa situazione nel mio server dedicato..
se fosse la stessa situazione, io l'ho risolta usando  una chacpa esterna.
(uso XP perchè win98 non si installa) 
PS: non sono un dipendente dello sbonzor quindi è necessario un "per favore" alla richiesta e un "grazie" alla risposta, sempre! PPS: non scrivo mai per primo in MP, in caso contrario chiedimi una conferma, Grazie.

mau_develop

  • Visitatore
Re:sessioni
« Risposta #6 il: 10 Giu 2011, 10:25:28 »
... ma puoi mettere un header() in quel punto?

M.

Offline dazo

  • Esploratore
  • **
  • Post: 169
    • Mostra profilo
Re:sessioni
« Risposta #7 il: 11 Giu 2011, 14:29:20 »
mau_develop in teoria hai ragione sarebbe buona norma mettere l'istruzione header all'inizio perché se lo script invia dei dati di output (anche un solo spazio bianco) si compromette l'invio dell'header, ma nei cms prima di iniziare a far girare il codice del plugin o del componente che hai scritto è già passato in così tante classi che qualche riga in più o in meno di codice non credo faccia poi la differenza.

E comunque alla fine ho capito l'errore di Lory!!!!

non è un problema di sessioni che mi sembrano scritte correttamente, ma su questo cavolo di empty ( l'avevo detto che non lo conoscevo...)

dalla guida ufficiale del php

Note:

Citazione
empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)).

insomma non si può scrivere

Codice: [Seleziona]
if (empty($session->get('rand_code'))){ ... }
ma se vuoi usare empty devi scrivere

Codice: [Seleziona]
$randCode = $session->get('rand_code');
if (empty($randCode)){ ... }



P.S.
cmq lory abilita nel php.ini  le segnalazioni agli errori perché session_start(); ti dovrebbe dare un notice come doveva averti dato errore empty... altrimenti rischi di scrivere del codice pieno di errori
« Ultima modifica: 11 Giu 2011, 14:36:56 da dazo »
Web Agency Roma
Web designer Seo

 



Web Design Bolzano Kreatif