Session e cookie funzionano solo dopo passaggio valori tramite POST

publi88

Nuovo Utente
7 Mag 2016
11
1
3
Buongiorno a tutti.
Mi è capitata una cosa stranissima.
Da pochi giorni sul mio sito session e cookie non funzionano più correttamente.

Ecco il codice COMPLETO delle 2 pagine test che uso per le prove:
Pagina test1.php

codice:
PHP:
<?php
session_start();


$_SESSION['test']=5;
if (isset($_SESSION['test'])){
    echo "ok";
} else {
    echo "error";
}
setcookie("test", "ok", time()+3600,"/");
?>


<form method="post" action="/test2.php">
<input type="submit" value="vai" name="azione" />
</form>

Pagina test2.php
codice:
PHP:
<?php
session_start();
if (isset($_SESSION['test'])){
    echo "ok";
} else {
    echo "error";
}


echo $_COOKIE['test'];
?>
Prima di tutto apro la pagina test1.php ed esce la scritta "ok" . PERFETTO quindi la session è stata settata

Poi apro la pagina test2.php e qui esce solo la scritta "error" . Ne session ne cookie funzionano

Provo più volte a caricare le 2 pagine ma non cambia niente.
Poi vado su test1.php e clicco il pulsante del form che semplicemente mi manda alla pagina test2.php passando i valori tramite post.

A questo punto si apre la pagina test2.php ed il testo che compare è "okok" . Session e cookie funzionano.

Chiudo il browser, lo riapro e su test2.php compare "okok" . Session e cookie continuano a funzionare

Spengo e riaccendo il computer, e sono di nuovo da capo con session e cookie che non funzionano.
La cosa piùstrana però è che facendo lo stesso identico test con le stesse pagine su un altro sito funzionano subito come è giusto che sia.

Qualcuno ha idea di cosa può essere?
Grazie
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
strano che ti funzioni comunque, setcookie deve andare prima di qualsiasi output html anche solo uno spazio, e tu hai comunque sempre un output in test1, o "ok" o "error", questo salco se per caso hai ridiretto il flusso e non l'hai scritto

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\test1.php) in C:\AppServ\www\test1.php on line 11
dove provando copy/paste il tuo script la riga 11 e quella del setcookie("test", "ok", time()+3600,"/");

scrivila appena sotto session_sart prima degli if
 

publi88

Nuovo Utente
7 Mag 2016
11
1
3
Ciao,
grazie della risposta.

In effetti posso metterla all'inizio come mi hai suggerito, ma il problema rimane lo stesso uguale.
Non dipende da quello purtroppo.

E anche non usassi il cookie il problema rimarrebbe lo stesso con la variabile di sessione.
 

publi88

Nuovo Utente
7 Mag 2016
11
1
3
La cosa più strana è nel fatto che provando lo stesso identico codice su un altro sito, funziona perfettamente.
 

publi88

Nuovo Utente
7 Mag 2016
11
1
3
Si però il problema non è quello, perchè come ti dicevo, anche mettendolo all'inizio non funziona.
Il problema è che finchè non faccio un passaggio di valori tramite POST, ne session, ne cookie funzionano.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
ho provato (le modifiche che ho fatto sono ininfluenti)
file test1.php
PHP:
<?php
session_start();
setcookie("test", "ok", time()+3600,"/");
$_SESSION['test']=5;
if (isset($_SESSION['test'])){
    echo $_SESSION['test']." ok ";
} else {
    echo "error";
}

?>
<form method="post" action="test2.php">
<input type="submit" value="vai" name="azione" />
</form>
file test2.php
PHP:
<?php
session_start();
if (isset($_SESSION['test'])){
    echo "ok<br>";
} else {
    echo "error";
}
echo $_COOKIE['test'];
?>
<br>
<a href="test1.php">torna</a>
e questi sono gli output

quindi funzia
comunque in test1 ti conviene modificare
PHP:
if(!isset($_COOKIE['test'])){setcookie("test", "ok", time()+3600,"/");}
cioè creare il cookie solo se non esiste gia, altrimenti con time() il tempo di esistenza si modifica ad ogni chiamata
 

publi88

Nuovo Utente
7 Mag 2016
11
1
3
Ok ti ringrazio,
però io ho appunto scritto che il codice è funzionante.

Io ho scritto che il codice funziona su altri siti, ma non funziona su questo.
Ho già provato anche io ad usarlo su un altro mio sito ed infatti funziona.

Il problema è che su questo sito in particolare i cookie e le session, funzionano soltanto dopo aver fatto il submit di una form.

Perciò la mia domanda era, qualcuno ha idea di quale motivo possa esserci nel fatto che su di un sito session e cookie funzionano normalmente e su un altro funzionano solo dopo aver passato dei valori tramite form?