Newsgroup: it.comp.www.php
Titolo: $_SESSION e cache

Ciao
In una pagina PHP, creata estraendo dei dati da un database MySql, ho
messo la possibilita' di creare un file PDF in modo da poter stampare
/ faxare / spedire / etc... l'output della pagina. Cliccando
sull'icona si apre la nuova finestra dove carica il PHP che crea il
PDF. Pensavo che non ci fosse bisogno di passare le variabili in
quanto tutti i dati utili sono memorizzati in $_SESSION pero'
purtroppo succede quanto segue :
- la prima volta (quando la cache e' vuota) la finestra, richiamata
con window.open("outpdf.php"), scatena il messaggio d'errore di
Windows dove dice che il puo' danneggiare il computer (tipo : Adobe
Acrobat Control for ActiveX) e quindi mi chiede se aprire o salvare.
Entrambe le scelte pero' non portano da nessuna parte in quanto il
127.0.0.1 non e' raggiungibile.
- se nel programma che crea il PDF aggiungo il comando
session_cache_limiter('private') subito prima di session_start()
allora il messaggio d'allame non esce e il PDF viene creato pero' se
poi provo a creare un altro PDF, usando valori diversi, mi viene
sempre visulizzato il primo. Sembrerebbe quasi che IE non cerchi
nemmeno di caricare il PHP e passi direttamente al PDF vecchio.
- Tutto funziona bene se insieme alla window.open passo anche le
variabili :
window.open("outpdf.php?A=" + parent.LEFT.FormL.A.value + "&B=" +
parent.LEFT.FormL.B.value etc...
Qual'e' la soluzione ?
In generale, come posso essere sicuro che il browser carichera' sempre
la pagina che il PHP ha appena creato e non una vecchia ?
Nella prima pagina (chiamiamola homepage) ho messo :
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
<meta HTTP-EQUIV="Expires" CONTENT="-1">
e' sufficiente ? Devo ripeterlo in ogni pagina ?
Grz, ciao

 Qual'e' la soluzione ?
Postare il codice della pagine che genera il PDF? 
Il fatto che venga visualizzato l'alert di sicurezza dell'activeX di
adobe e' molto strano in quanto lo stesso' e' gia' installato sulla
macchina.
-- 
I'am what I'am, I do what I can
Sei un newbie? Leggi questo 
http://tinyurl.com/26nej
 

Postare il codice della pagine che genera il PDF?
Tutto ? E' un pochino lungo (circa 500 righe)
Limitiamoci alla funzione che apre la nuova finestra e alle prime
righe del programma che viene eseguito nella finestra :
-----funzione che richiama la nuova finestra----
function CreatePDF()
  {
  //window.open("outpdf.php?OrgId=" + parent.LEFT.FormL.OrgId.value +
  // "&CurId=" + parent.LEFT.FormL.CurId.value +
  // "&ExUnd=" + parent.LEFT.FormL.ExUnd.value +
  // "&CouId=" + parent.LEFT.FormL.CouId.value +
  // "&ClCod=" + parent.R1.FormR1.ClCod.value +
  // "&SortF=" + parent.R1.FormR1.SortF.value +
  // "&TType=" + parent.LEFT.FormL.TType.value +
  // "&Dispu=" + parent.LEFT.FormL.Dispu.value +
  // "&PDate=" + parent.LEFT.FormL.PDate.value +
  // "&DLimt=" + parent.LEFT.FormL.DLimt.value);
  window.open("outpdf.php", "", "dependent=yes, directories=no,
toolbar=no, location=no, resizable=yes, menubar=no, scrollbars=yes,
status=yes");
  }
----prime righe del programma eseguito in finestra
<?php
  session_set_cookie_params(0);
  session_cache_limiter('private'); 
  session_start();
  error_reporting(E_ALL);
  set_error_handler("eh");
  require('fpdf.php');
  include("configg.inc.php");
  $OrgId = $_SESSION['OrgId'];
  etc... qui vengono caricate tutte le variabili globali e poi
prosegue con la creazione del PDF (lettura del DB, intestazione,
etc...)
Cosi' com'e' adesso (window.open che non posta parametri e comando
session_cache_limiter inserito) continua a fare vedere sempre la
stessa pagina PDF. Sicuramente il file PHP non viene richiamato (ho
provato ad inserire un errore subito dopo la include e non e' uscito
nulla).
Se tolgo il session_cache_limiter vedo sempre la stessa pagina PDF
fino a quando svuoto la cache di IE. A cache vuota esce l'alert di
sicurezza.
Se invece, nella funzione CreatePDF uso la window.open (quella che
adesso e' commentata e che posta i valori) :
- con session_cache_limiter
  funziona bene
- senza session_cache_limiter
  vedo solo pagine gia' viste in precedenza (quindi in cache). Con
nuovi valori o con cache vuota c'e' l'alert.
Concludendo :
- vuole il session_cache_limiter (ma non e' chiaro perche'. quando
leggevo le variabili con $_GET il session_cache_limiter non c'era
eppure funzionava)
- funziona solo se le variabili le passo nell'indirizzo (questo
perche' vede un indirizzo diverso non ancora in cache e quindi
ricarica la pagina) anche se poi non le uso. Il problema e' che anche
passando due volte le stesse variabili in teoria il PDF creato
potrebbe essere diverso. Le variabili non sono altro che dei filtri
che servono per estrarre record da un database e quindi, se il
dabatase cambia, con gli stessi parametri in input si ha un output
diverso.
Come faccio a dirgli che non deve mai mai mai usare la cache ?
Tks, ciao

 Come faccio a dirgli che non deve mai mai mai usare la cache ?
Utilizzando la funzione header. Cerca con google si trovano decine di
esempi.
