Se è la mia prima visita al sito non esiste alcun valore per la sessione. La sessione non è magia ma in molti casi di predefinito salva su file e appunto se non ti conosce prima non può salvare.
Stato iniziale della sessione http (non dovrà essere attiva)
Codice PHP:
//attivazione o recupero sessione
session_start();
if(empty($_SESSION['messaggio'])) // Verifica iniziale se la pagina è caricata ogni mezzo secondo, imposta il default a null
$_SESSION['messaggio'] = null; //Valore globale iniziale a null
Se l'utente invia messaggio (o comunque già esiste nel database)
Codice PHP:
//Creo da qualcosa o aggiorno da qualcosa
$_SESSION['messaggio'] = 'valore query database o dal form html direttamente digitato dal tuo utente';
Giustamente se mi connetto per la prima volta e visualizzo solo la pagina html, l'utente non può avere il messaggio memorizzato nella sessione (discorso diverso se recuperare il messaggio dal database che comunque la scelta della sessione è errata ma recupera il dato fisso dal database).
file recupero stringa e creo dati in formato json come oggetto ad esempio { "name": "john", "time": "2pm" }. page2.php
Codice PHP:
<?php
header('Content-Type: application/json');
if (isset($_GET['_'], $_GET['name'], $_GET['time']) && is_string($_GET['_']) && is_string($_GET['name']) && is_string($_GET['time']))
echo json_encode(array('_' => $_GET['_'], 'name' => $_GET['name'], 'time' => $_GET['time']));
else
echo '{}'; //Da jquery 1.9 devo ritornare null o {} altrimenti non è un json valido.
?>
supponi che la query del database ritorni una variabile array. Mentre array() è un costrutto di linguaggio utilizzato per rappresentare array letterali e non una funzione regolare, mi occorre per creare il json poiché non uso una variabile array.
page1.php
Codice:
<?php
?>
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$.ajax({
url: "page2.php",
type: "GET",
cache: false, // add _=timestamp
data: { name: "john", time: "2pm"},
dataType: "json",
success: function(result){
var str = result._ + result.name + result.time;
$("div#risposta").html(str);
},
error: function(richiesta,stato,errori){
$("div#risposta").html("Chiamata fallita: "+stato+" "+errori);
}
});
</script>
</head>
<body>
<div id="risposta"></div>
<button>Send an HTTP GET request to a page and get the result back</button>
</body>
</html>
Questo è jquery non necessariamente markup html, non scrivo il form ma effettuo l'invio, ergo richiesta http GET a page2.php (query string
http://www.example.com/page2.php?name=john&time=2pm) ma puoi impostare .
Il nome di page2.php può anche essere riscritto in ciò che a te serve, nel mio esempio creo un'oggetto Javascript (il valore di data: può anche essere stringa o oggetto jquery o oggetto dom nativo oltre che oggetto Javascript) trasformato e inviato in stringa da jquery.
Questo è un semplice esempio ma solitamente effettui operazioni solo al completamento del caricamento di pagina, per questo motivo c'è button anche se non l'oggetto jquery, ergo $("button"), cache false non memorizza la pagina nella cache.