Buongiorno,
grazie per la cortese e sollecita risposta.
Che PHP sia stateless (purtroppo) mi è chiaro, ci ho sbattuto immediatamente il naso cercando di fare il porting in questo linguaggio di una applicazione aziendale dhe avevo realizzato in VB/SQL.
All'inizio di ogni file includo un file con tutti i settaggi e le funzioni base ( reminescenza VB) la prime righe
sono le seguenti :
Codice PHP:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
define("DEBUG_MODE",true);
date_default_timezone_set('Europe/Rome');
if (DEBUG_MODE) { error_reporting(E_ALL);} else {error_reporting(0);}
Cambio DEBUG_MODE = false quando finisco i test.
In effetti sul sito errori e notice sono chiaramente indicati infatti viene visualizzato :
Codice PHP:
Undefined index: ses_co1 in /membri/kairos2020/php/azi_grd.php on line 20
Inizialmente utilizzavo i cookies, in questo progetto ne uso solo uno per gestire il pop della privacy, oltre
naturalmente all'ID di sessione che viene creato automaticamente.
Anche per il passaggio tra 'form' di flag (record cancellato etc.) utilizzo una variabile di sessione.
Non son certo sia il modo migliore ma... funziona.
Il tuo esempio è chiarissimo, il problema è che io faccio esattamente così.
Ho uno il seguente script :
Codice PHP:
$form=filter_input(INPUT_GET, 'frt', FILTER_SANITIZE_NUMBER_INT);
$cod=$_GET['cod'];
// Se i ati non sono corretti invio a uno script che azzera tutte le variabili di sessione e invia a home
// Cod è sanificato con una funzione perchè FILTER_SANITIZE_STRING è deprecato ... credo
if(!ValidaInput($cod)) {header('Location: gen_rst.php?frt=1');exit;}
if(!is_numeric($form)) {header('Location: gen_rst.php?frt=1');exit;}
if($form== 1) {
$_SESSION['ses_frm']="azi_grd.php"; $_SESSION['ses_tab']='aziende';
$_SESSION['ses_ord']='aziAzi ASC'; $_SESSION['ses_pag']=1;$_SESSION['ses_rpa']=15;
$_SESSION['ses_co1']=$cod;}
//
if($_SESSION['ses_frm']=="") {header("Location: gen_err.php?num=99&frt=1&tipo=1");exit;}
// Se non $_SESSION['ses_frm'] non è, per qualsiasi ragione definito registro l'errore, resetto e torna a HOME
// altrimenti carico lo script selezionato con le variabili di sessione qui creati
$dove=$_SESSION['ses_frm'];header("Location: $dove");exit;
In questo caso $dove corrisponde allo script azi_grd.php che al caricamento visualizza :
Notice: Undefined index: ses_co1 in /membri/kairos2020/php/azi_grd.php on line 20
Notice: Undefined variable: cod in /membri/kairos2020/php/azi_grd.php on line 36
Notice: Undefined index: ses_co1 in /membri/kairos2020/php/azi_grd.php on line 37
Notice: Undefined index: ses_rpa in /membri/kairos2020/php/azi_grd.php on line 41
Notice: Undefined index: ses_pag in /membri/kairos2020/php/azi_grd.php on line 42
Notice: Undefined index: ses_ord in /membri/kairos2020/php/azi_grd.php on line 43
e questo warning dovuto al valore NULL di uan variabile di sessione
Warning: Division by zero in /membri/kairos2020/php/azi_grd.php on line 46.
... All'inizio di ogni scrip includo la classe ClSysSecure della quale creo subito una istanza
la classe ha il seguente __construct
Codice PHP:
public function __construct() {
$this->cookie = [ 'lifetime' => 0,'path' => '/','domain' => '','secure' => true,
'httponly' => true,'samesite' => 'lax'];
$this->initSession();
}
private function initSession() {
ini_set('session.use_cookies','1');
ini_set('session.use_only_cookies','1');
ini_set('session.use_trans_id','0');
ini_set('session.use_strict_mode','1');
session_set_cookie_params($this->cookie);
$this->iniziaSessione();
}
Quindi di sicuro la sessione è aperta in ogni form, in ogni caso ho controllato utilizzando
Codice PHP:
if(session_status() !== PHP_SESSION_ACTIVE) { die "Sessione morta";}
else { die("Sessione attiva");}
la risposta è sempre Sessione attiva.
Sono senza dubbio un principiante, ho letto molti manuali sul linguaggio ( il mio prof. di fisica sosteneva invero che studiare e capire sono domini completamente diversi tra loro) e questo problema attiene all' ABC del PHP,
è davvero frustante perchè dato per certo che il PHP funziona sono io che commetto un errore madornale (eufemismo)
Mi scuso per la lunghezza .
Grazie per la cortese e paziente attenzione.