[ verbe @ 15.06.2018. 19:02 ] @
Na početku fajla dajem dve random vrednosti koje saberem i rezultat smestim u sesiju. Te dve iste vrednosti prenesem kao tekst u formu: Koliko je ' 5 + 8 = ' i pored stavim input polje. Vrednost tog polja treba da bude jednak vrednosti iz sesije. E sad, neverovatna stvar mi se desava. Kada ukucam vrednost sa kompjutera na kom je sajt - server, sve je u redu, validacija prolazi. A kad probam sa telefona i drugog laptopa, vrednost ne prolazi. Dobijem grešku, da rezultat nije tačan.

Ovako proveravam rezultat:

Code (php):

if ($_POST['score'] == $_SESSION['captcha']) {

// ok je
} else {
// nije ok, poruka o grešci
}
 


Čudi me da na serveru radi a sa laptopa koji je u istoj mrezi neće. Čak sam pokušao da sve vrednosti stavim u sesiju. I prvu operandu i drugu, i rezultat, opet ne prolazi. Na kraju sam vrednost stavio u hidden polje i sad je ok. Medjutim, pitanje je koliko je to sigurno. Jel zna neko o čemu se radi? To je prvo. A drugo, jel imaju negde gotove captcha slike, desetak komada, da budu slične, pa da tako proveravam vrednost. Ne bih da dinamički kreiram sliku. Malo mi je to komplikovano.

pozz..
[ Nemanja Avramović @ 15.06.2018. 23:04 ] @
Za početak prikaži vrednosti da vidimo šta dobijaš i šta je u sesiji. Pokaži i kod koji generiše brojeve/čuva ih u sesiji.


Code:
var_dump($_POST['score']);
var_dump($_SESSION['captcha']);

[ verbe @ 16.06.2018. 08:58 ] @
Code (php):


if ($_POST['score'] == $_SESSION[SITE]['captcha']) {


}

// captcha //
$rc1 = rand (0, 10);
$rc2 = rand (0, 10);
$_SESSION[SITE]['captcha'] = $rc1 + $rc2;
// end captcha //

 


rezultat var_dump je ovo(u istom trenutku):

Code:


Za sesiju: int(19)

Za post: string(2) "14" 



Inače 14 je tačan rezultat.

Šta se to ovde dešava?
*p.s. Ovo sam sad ponovo odradio na brzinu, izbrisao sam hidden dugme, sad ne radi ni na serveru. Predpostavljam da $rc1 i $rc2 treba staviti iznad if, a sesiju ispod :) Mada html mi je skroz ispod na kraju.
[ plus_minus @ 16.06.2018. 10:12 ] @
Ako proveravaš da li je identično sa `===`, onda ili konvertuješ/`preobraziš` vrednost iz sesije u string $hidden_value = ((string) $_SESSION[site]['captcha']); ili korisničku vrednost u integer $user_value = ((int) $_POST['captcha']); ..

Imaj u vidu takođe, da se proces sa sesijom ponovo odvija i na POST ..

A to da li treba u if ili iznad ili ispod ...

hints:

imaš i else {}
rand() je tu baš da nikad ne izabere isto...
Šta će ti `if` block ako je prazan ?!? ..

i još mnogo hintova...
[ verbe @ 16.06.2018. 10:35 ] @
Sad je isti tip, ali opet razlicita vrednost. Kao da sesija ne osvezava na drugom kompu i na mobilnom. Na serveru je ok.
-----------
Šta sam uradio: Ubacio sam ponovo hidden dugme ali sa kriptovanom vrednošću, tako da je sad ok. Medjutim, prosto me čudi ovo sa sesijom. Obično volim da pratim proceduru i pokušavam da shvatim kako kod radi. I nikako mi ne ide u glavu da se sesija menja prilikom submit. Zar se ne cuva vrednost sesije u browseru? I kako to da na serveru sve radi, a na drugom kompu neće? Zaista me to čudi.

[Ovu poruku je menjao verbe dana 16.06.2018. u 14:12 GMT+1]
[ Nemanja Avramović @ 19.06.2018. 00:06 ] @
Ja bih pre rekao da se osvežava i više (češće) nego što bi trebalo, a ne da se ne osvežava ali iz koda koji si ostavio i dalje nije jasno šta gde stoji i šta se tu ustvari dešava
[ verbe @ 19.06.2018. 09:37 ] @
Hvala Nemanja. Čekao sam tvoj odgovor. Nekom drugom prilikom, hidden input mi je lepo zavrsilo posao.
[ Miljan_X @ 04.07.2018. 20:35 ] @
Za pocetak trebao bi koristiti ob_start() i ob_flush() pri radu sa sesijama. Jedan od problema moze biti i cachovanje, ukoliko je sajt cached u vecino slucajeva iako je kod dobar njegov manifest se ne prikazuje prilikom refershovanja. Takodjer nemoj zaboraviti da oslobodis sessiju sa session_destroy()