Joomla.it Forum

Joomla! 3 => Joomla! 3 => : Daniele Pinna 15 Sep 2018, 20:01:48

: [RISOLTO] Disabilitare la Cache solo per uno specifco URL
: Daniele Pinna 15 Sep 2018, 20:01:48
Salve a tutti :-)
Sono alle prese con una estensione per Agenzie Immobiliari (non la nomino perché commerciale) che fra le varie funzioni ha la possibilità di "Confornto"... si aggiungono due o tre immobili e si procede al confronto delle caratteristiche.

La cosa particolare è che quando clicco su "Confronta" non mi visualizza la pagina aggiornata... ma la situazione preceente (ad esempio dove nella lista avevo incluso un immobile differente). Il problema lo risolvo facendo un semplice refresh della pagina (F5).
Il supporto (molto disponibile) pare non aver capito bene il problema (o forse a loro non lo fa)...
Sto cercando quindi di risolvere il problema in autonomia...

Un primo approccio è stato quello di cercare una esclusione o una scadenza breve nella cache per un percorso predefinito da impostatre su .htaccess. C'è qualcosa ma riguarda solo le estensioni e non i singoli URL.
Ho trovato quindi il file PHP del componente che genera la pagina di confronto e ho aggiunto del codice ($document->setMetaData ) in modo da ottenere le seguenti righe nel header:


:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />


Purtroppo non cambia nulla...

Sto sbagliando qualcosa?
Devo usare del codice differente?

NOTA:
- la cache di Joomla! è disabilitata
- sul server (è un mio VPS) non viene usato Cloudfire o simili

Ringrazio Anticipatamente per le Risposte :-)
: Re:Disabilitare la Cache solo per uno specifco URL
: tonicopi 16 Sep 2018, 00:01:20
Ciao Daniele, puoi nominare pure l'estensione anche se commerciale perchè non vige più quel divieto.Cmq io proverei a far fare subito un refresh automatico a quella pagina dato che con quello il problema sembra risolversi  ;D
: Re:Disabilitare la Cache solo per uno specifco URL
: giusebos 17 Sep 2018, 11:09:21
nelle impostazioni della cache vi è la possibilità di escludere determinate URL
: Re:Disabilitare la Cache solo per uno specifco URL
: Daniele Pinna 17 Sep 2018, 13:10:30
Ciao Daniele, puoi nominare pure l'estensione anche se commerciale perchè non vige più quel divieto.
Ah... ecco, non lo sapevo :-)Sono contento che non ci sia più questa restrizione...
Cmq l'estensione è OS Property...

Cmq io proverei a far fare subito un refresh automatico a quella pagina dato che con quello il problema sembra risolversi  ;D
Ecco... non avevo pensato a questo... oggi provo con questo sistema :-)Grazie!!!
: Re:Disabilitare la Cache solo per uno specifco URL
: Daniele Pinna 17 Sep 2018, 13:12:17
nelle impostazioni della cache vi è la possibilità di escludere determinate URL
Si avevo già provato ad impostare l'URL che non va memorizzato in cache nel plugin presente di default in Joomla! e anche usando una estensione aggiuntiva... ma non risolve :-(
Grazie cmq per il suggerimento :-)
: Re:Disabilitare la Cache solo per uno specifco URL
: giusebos 17 Sep 2018, 14:32:26
fai attenzione che funziona solo se la cache è ativata ed è configurara dal pannello di controllo scegliendo il tipo di cache.
: Re:Disabilitare la Cache solo per uno specifco URL
: Daniele Pinna 22 Sep 2018, 21:07:54
fai attenzione che funziona solo se la cache è ativata ed è configurara dal pannello di controllo scegliendo il tipo di cache.
Non ero sicurissimo di aver attivata la cache, quindi ho riprovato ad attivarla sia nel plugin (con la pagina impostata) sia da Configurazione Globale, senza però risolvere.
Però come ha suggerito tonicopi ho inserito un refresh nella pagina (modificando il sorgente) con il seguente codice
:
$document->setMetaData("refresh", "0", $attribute = "http-equiv");che alla fine risulta una volta interpretata la pagina:
:
<meta http-equiv="refresh" content= "0" />La pagina si riavvia in continuazione... quindi ho aumentato a 10 secondi e in effetti funziona. Ma è una scocciatura e certamente non va bene il riavvio ogni 10 secondi. Però è già una indicazione che "probabilmente" la strada è giusta.
Cercando varie soluzioni, anche con Script Java di Refresh, nessuno funziona (proprio non partono... forse per errore mio).Decido di adattarne una di queste soluzioni al PHP e nello stesso punto in cui avevo inserito il codice per il refresh, inserisco questo codice PHP

:
        $osp_time=time();    //Leggo il Tempo
       
        if (isset($_COOKIE['osp_reload'])) {  //verifico se il cookie esiste
           
            $osp_time_cookie = $_COOKIE['osp_reload']; //Recupero il valore del cookie
            $osp_time_cookieFix = ($osp_time_cookie + 10);  //aggiungo 10 secondi al valore letto dal cookie
            setcookie("osp_reload", $osp_time, time()+3600);    //Lo un nuovo valore nei cookie

            if ($osp_time_cookieFix > $osp_time) {  //Verifico il valore del cookie è superiore di 10 secondi rispetto a quello attuale
                echo "AAA Cookie= " . $osp_time_cookieFix . " -> Time = " . $osp_time . " -> Diff= " . ($osp_time - $osp_time_cookieFix);
                $document->setMetaData("refresh", "0", $attribute = "http-equiv");    //Inserisco l'struzione per ricaricare la pagina               
                } else {
                echo "BBB Cookie= " . $osp_time_cookieFix . " -> Time = " . $osp_time . "->  Diff= " . ($osp_time - $osp_time_cookieFix);
            }
        } else {    // il cookie non esiste, lo scrivo e faccio comunque il refresh
            setcookie("osp_reload", $osp_time, time()+3600);    //Lo salvo nei cookie
            echo "CCC Cookie= " . $osp_time_cookieFix . " -> Time = " . $osp_time . "-> Diff= " . ($osp_time - $osp_time_cookieFix);
            $document->setMetaData("refresh", "0", $attribute = "http-equiv");    //Inserisco l'struzione per ricaricare la pagina               
        }
   

In sintesi:- leggo il tempo attuale
- leggo il tempo memorizzato nei cookie (tempo precedente)
- se il tempo memorizzato nei cookie + 10 secondi è superiore al tempo attuale ricarico la pagina, altrimenti no.
Il problema è che "grazie" alla cache tutti quei valori rimangono gli stessi (lo si nota proprio per gli echo che visualizzo)


Ho provato anche una variante inserendo questo
:
$document->setMetaData("refresh", "0;URL=?$osp_time", $attribute = "http-equiv");Aggiunge qualcosa di variabile all'URL e pensavo in quel modo di fregare la cache, ma niente... il valore di $osp_time non varia fino a quando non fa un vero e proprio riavvio :-\



: Re:Disabilitare la Cache solo per uno specifco URL
: Daniele Pinna 23 Sep 2018, 13:12:08
RISOLTO!!!  ;D ;D ;D
Cercando una soluzione sono arrivato ad una pagina che indicava come gestire la scadenza della cache con PHP
Più o meno con queste indicazioni:

:
header("Pragma: no-cache");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Expires: on, 01 Jan 1970 00:00:00 GMT");

Chiaramente viene male inserirle così brutalmente su Joomla! e occorre usare la funzione SetHeader

:
JResponse::setHeader('Pragma: ', 'public',true);
JResponse::setHeader('Cache-Control: ','public',true);
JResponse::setHeader('Expires: ', gmdate('D, d M Y H:i:s', time()+(5)) . ' GMT',true);    //scadenza dopo 5 secondi dalla generazione
Invece di lasciare una data moooolto vecchia (1970) prima che che i browser la rifiutiono per qualche motivio, ho deciso di calcolare al volo la data e aggiungere semplicemente 5 secondi per stabilire la data di scadenza.

Dato che ho citato un componente specifico, OS Property, segnalo che il file da modificare è il seguente:
:
/components/com_osproperty/classes/compare.phpsotto questa riga
:
$document->setTitle($configClass['general_bussiness_name']." - ".JText::_('OS_COMPARE_PROPERTIES'));
Chiaramente ora segnalo all'autore... questa soluzione... può essere che venga recepita :-)

In ogni caso ringrazio tutti per l'aiuto :-D



: Re:[RISOLTO] Disabilitare la Cache solo per uno specifco URL
: tonicopi 24 Sep 2018, 10:12:46
Grazie Daniele, talvolta ho usato OS Property (ma non ho mai usato il confronto) e mi tengo annotata questa cosa che potrebbe tornarmi utile!
: Re:[RISOLTO] Disabilitare la Cache solo per uno specifco URL
: Daniele Pinna 24 Sep 2018, 10:38:40
Tieni presente che per far funzionare il confronto ho dovuto far intervenire il supporto e dargli l'accesso al sito...
Non so che modifiche abbia fatto per farlo funzionare :-D