Sui cookie, non mi prende il valore

Ho verificato che i cookie siano abilitati, e infatti il cookie c'è, ma il sistema non mi valuta l'espressione, ecco il codice e la spiegazione di tutto.

if (filter_var($_GET['id'], FILTER_SANITIZE_SPECIAL_CHARS) === 'visibile') $visibile = true;
else $visibile = false;
if (isset($_COOKIE['visibile']) && ($_COOKIE['visibile'] === true ||  $_COOKIE['visibile'] === false)) $visibile = $_COOKIE['visibile'];
else setcookie('visibile', $visibile, time()+3600, '/', '127.0.0.1');

Ora la GET è passata attraverso l'URL ed ha un valore unico che 'visibile' e che viene trasformato in true se presente, qualsiasi altro valore da false.

Questo valore arriva da un semplice link nella pagina associato alla classica immaginetta di una A, insomma un link per dare una versione ad alta accessibilità della pagina.

Se clicco sulla A la pagina cambia effettivamente nella versione ad alta accessibilità, quindi la prima espressione vine verificata, parlo di:

if (filter_var($_GET['id'], FILTER_SANITIZE_SPECIAL_CHARS) === 'visibile') $visibile = true;
else $visibile = false;

Se riclicco, torna alla versione normale, quindi il sistema fino a qui funziona.

Dove non funziona è nella seconda parte, quella relativa al cookie, infatti se vado su un'altra pagina del sito o se chiudo il browser e poi ritorno sulla pagina, comunque vedo sempre il sito in versione "normale" e non ad alta accessibilità, è come insomma, se il cookie non venisse preso in esame affatto.

In questa fase ho voluto implementare un sistema di sicurezza nel modo di verifica del valore nel cookie, ma se lo tolgo come nell'esempio qui sotto addirittura non funziona più nulla, mi date una mano a non impazzire?

if (isset($_COOKIE['visibile'])) $visibile = $_COOKIE['visibile'];
else setcookie('visibile', $visibile, time()+3600, '/', '127.0.0.1');
inviato 8 anni fa
Marco Grazia
X 0 X

Fai un vardump di $_COOKIE e verifica se $_COOKIE['visibile'] è realmente un booleano. Il mio dubbio è che il controllo $_COOKIE['visibile'] === true sia troppo stringente poiché utilizza 3 "uguale"

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Avevi perfettamente ragione  ;) ora funziona.

EDIT Anzi no  :-[

risposto 8 anni fa
Marco Grazia
modificato 8 anni fa
X 0 X

Niente nno va, ho modificato così il codice ma ancoran on funziona :(

switch (filter_var($_GET['id'], FILTER_SANITIZE_SPECIAL_CHARS)) {
   case 'visibile': $visibile = '1'; break;
   case 'invisibile': 
   default: $visibile = '2';
}

if (isset($_COOKIE['visibile'])) $visibile = $_COOKIE['visibile'];
else setcookie('visibile', $visibile, '01-01-3000', '/', '127.0.0.1/StefaniaFangarezzi/');
var_dump($_COOKIE['visibile']);
echo ': '.$_GET['id'] . ', '. $visibile;
risposto 8 anni fa
Marco Grazia
X 0 X

Io organizzerei il codice in maniera diversa.

Per prima cosa recupero il valore del cookie e setto la variabile $visibile di conseguenza, prevedendo ovviamente anche la possibilità che il cookie non ci sia. In un modo o nell'altro $visibile a questo punto dovrà avere un valore.

Poi controllerei $_GET['id'] e se presente andrei a settare $visibile e ad inviare un nuovo cookie.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ci provo questa sera e ti dico.

Questa cosa l'ho presa proprio nel modo sbagliato.  :(

risposto 8 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda