Newsgroup: it.comp.www.php
Titolo: Variabili session oppure?

sono alle prime con il php...
(ma uso Visual C++ ed altri linguaggi di programmazione)
sto programmando in php un sito dinamico,
in realtà è già quasi finito ma vorrei ottimizzare alcune query sul server e 
vi spiego il problema.
ho costruito il sito utilizzando i CSS e quindi diverse pagine php
una per ogni contenuto (la pagina è divisa in 4/ 5 differenti contenuti)
0 index.php (che richiama le varie parti con un include....)
1- menu.php
2- contenuto principale.php
3- contenuto up.php (sopra la pagina)
4- contenuto down.php
etc....
il mio problema è come allocare alcune variabili Globali in modo
da non dover rifare query "identiche" sul database per capire il tipo di 
pagina da visualizzare...
non voglio usare i metodi post e get perchè in questo caso l'utente 
visualizzerebbe questi dati...
ed io voglio invece che il tutto rimanga trasparente
in pratica quando un utente si collega io controllo la pagina dinamica da 
visualizzare in
menu.php e poi devo ricontrollare la pagina da visualizzare anche in 
contenutoprincipale.php e così via.
invece vorrei implementare una funzione unica in index.php che poi salvi in 
alcune variabili globali alcuni codici
che userei nelle altre pagine contenuto per "capire" il tipo di pagina da 
visualizzare....
spero si capisca il discorso...
ho visto la Session, ma sembra che mandi dei cookie ed io non voglio mandare 
cookie sul client http...
grazie a tutti

ed io voglio invece che il tutto rimanga trasparente
Quindi non vuoi inviare dal browser ne' GET, ne' POST, ne' cookie.
Domanda: come fa il server a capire che il tizio che gli sta facendo la
richiesta X, e' lo stesso tizio che ha appena fatto la richiesta Y, per
cui i dati di sessione vanno riciclati (anziche' ricreati vuoti)?
Rimangono possibili:
a) Login utente. Usi un hash di REMOTE_USER come cookie di sessione.
b) Nonce. Bisogna che inizializzi una sessione nulla con autenticazione
   Digest (non puoi usare http://user@password:website/, perche' non e'
   piu' cross-browser per motivi di sicurezza (phishers del menga!))
c) IP+User-Agent+altro: rischiosissimo (la probabilita' che due diversi
   utenti abbiano identici parametri e' inaccettabile)
d) Trucco con mod_rewrite, reindirizzando da
	/index.php
   a
	/58ee09937d51f3886dcd0c0ea91c053e/index.php
   e poi usando questo come rewrite di index.php?SESSION_ID=58ee09...
e) (necessari 200 punti magia e il lancio di un doppio sei)
Leonardo
-- 
IN NO EVENT SHALL MICROSOFT [] BE LIABLE FOR [] FAILURE TO MEET ANY DUTY
INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR NEGLIGENCE [] EVEN IN
THE EVENT OF [] BREACH OF CONTRACT OR BREACH OF WARRANTY OF MICROSOFT...
                              -- EULA di Windows Media VCM 9, articolo 8

 ha scritto nel messaggio 
news:qFdvk.141980$FR.4...@twister1.libero.it...

sto provando ad utilizzare le variabili con SESSION
unico problema è che mi fa instanziare una variabile solo all'inizio della 
sessione sul index.php
se invece ne dichiaro altre appena sotto (anche sempre in index...) mi dice 
che ha già spedito l'header della pagina... 


ok,
a me non interessa che l'utente sia univoco...
mi interessa solo mandare delle variabili create dalla index.php al file 
menu.php
in modo da non dover rifare alcune query che già ho fatto in index....
in pratica non mi interessa la sessione....
anche se il tizio cambia di fatto mi sta chiedendo una pagina Y ed io 
visualizzo tutti dati coerenti (menu , content up , content down)
per la pagina Y....
probabilmente quel che voglio fare si chiama in un altro modo...
(terrò a mente però questo post... sono utili gli altri consigli da te dati)

in modo da non dover rifare alcune query che già ho fatto in index....
Ah beh, ma allora basta che tu le salvi su un file di testo locale; oppure
che tu crei una sessione virtuale mettendo sempre lo stesso session_id.
Per es.:
<?php
	// Salvo le variabili query, pippo, pluto, ...
	$go = false;
	if (!file_exists("cache.txt"))
		$go = true;
	else
		if (altre condizioni a piacere, come filedate...)
			$go = true;
	if ($go)
	{
		/*
			Qui il vecchio codice che tira fuori
			query, pippo, pluto, ...
			(un monte di calcoli)
		*/
		$blob	= serialize(array($query, $pippo, $pluto, ...));
 
		$fp	= fopen("cache.txt"); // Va usato FLOCK/FUNLOCK
		fwrite($fp, $blob);
		fclose($fp);
	}
	else
	{
		$blob = file_get_contents('cache.txt');
		list($query, $pippo, $pluto, ...) = unserialize($blob);
	}
	unset($fp, $go, $blob);
	// Da qui in poi e' tutto come prima... solo che se il file
	// cache.txt esiste, e le condizioni sono buone, non faccio
	// tutti i calcoli ma prendo tutto dalla cache.
?>
Leonardo S.E.&O.


 ha scritto nel messaggio 
news:p0uqb45ka73pqeam4...@4ax.com...

ok, al file ci avevo pensato ma credevo esistesse già qualche istruzione che 
facesse al caso mio.
dovrei anche discriminare il fatto che due utenti richiedano 
contemporaneamente due pagine diverse...
in quel caso il file verrebbe sovrascritto dal secondo utente...
possibile che non esista qualcosa sul server che mi tenga in memoria ram 
alcune informazioni temporanee
e faccia in modo che queste informazioni temporanee non interferiscano se si 
collegano più utenti contemporaneamente?

 ha scritto nel messaggio 
news:pkfvk.142078$FR.4...@twister1.libero.it...

Sto provando a creare delle mie variabili $TIPOPAGINA
e le creo all'interno del file index.php e successivamente le rileggo dagli 
altri file php
richiamati dal file index.php...
devo controllare come si comportano quando si collegano due utenti 
diversi...
se sono variabili globali c'è il rischio sovrascrittura da controllare...

contemporaneamente due pagine diverse...
Fai in modo che la cache abbia il nome della pagina richiesta, ma
estensione diversa. Oppure - perche' no? Tanto generi HTML - crei
la pagina, ma anziche' mandarla all'utente, la salvi in HTML come
cache.
<?php
	/* cachatoio.php */
	error_report(E_ALL);
	$cache	= __FILENAME__ . '.html';
	/*
		Il file di cache deve esistere; deve essere
		piu' nuovo del suo babbo PHP; e deve essere
		non piu' vecchio di un'ora.
		BUGS
		Questo file puo' avere problemi con ob_gzhandler
		e zlib_encode, e poi problemi di prestazioni con
		mod-deflate. Sarebbe utile usare gzip_compress e
		mandare gli opportuni header. E gestire (magari)
		If-Modified-Since e simili.
		Scriviamo gli html nella cartella corrente,
		che non e' MAI una buona idea. Non c'e' uno
		straccio di flock() o di disk full check.
	*/
	if (file_exists($cache))
	if (filemtime($cache) > filemtime(__FILENAME__))
	if (filemtime($cache) > time() - 3600)
	{
		readfile($cache);
		die();
	}
	ob_start();
	register_shutdown_function('cachesave');
	function cachesave()
	{
		GLOBAL $cache;
		if (false !== ($fp = @fopen($cache, 'w')))
		{
			fwrite($fp, ob_get_contents());
			fclose($fp);
		}
	}
?>
Dopodiche' nelle tue pagine .PHP ti limiti a un secco
	require_once 'cachatoio.php';
...come sempre garantisco freschezza, non verita'. Anzi, garantisco
anche poca freschezza :-); rivedi accuratamente il codice e vedi se
fa al caso tuo.
Facci sapere.
Leonardo


 ha scritto nel messaggio 
news:1rcrb45t1brd0ruhq...@4ax.com...

ciao Leonardo,
mi hai sicuramente dato delle buone dritte.
è sicuramente utile avere una directory con pagine cache...
in effetti sto elaborando un sito php dinamico abbastanza complesso e
vengono generate parecchie query sul db pertanto stavo già pensando ad un 
sistema
per fare cache delle pagine in modo automatico.
il sito è abbastanza grande per cui poi dovrò verificare il limite tra
la diminuzione di query sul db e l'aumento dello spazio occupato sul server.
(il solo DB per il momento mi occupa più di 100MB.... )
programmo con il php solo da alcuni mesi tuttavia
devo dire che il php è un linguaggio semplice e potente.

(il solo DB per il momento mi occupa piů di 100MB.... )
Eh, e' un discreto malloppo. Ci sono sistemi per ridurre lo spazio
occupato dai dati, ma dipende da che dati sono.
(Es.: JPEG: le riprocessi con NeatImage, vengono pure migliori, ma
occupano il 20-30% di spazio in meno, e a parita' di compressione;
testi e html: li archivi gzippati; altri dati si comprimono bene a
colpi di delta-coding; eccetera).
Anche il DB magari si puo' ottimizzare: non sottostimare il potere
della For^W EXPLAIN e un paio di indici messi nel punto giusto.
Nel caso del caching, dipende anche dall'hosting; il reverse proxy
e' un trucco che conviene a tutti :-) e alcuni offrono il supporto
per MemCache: 
http://it.php.net/manual/it/intro.memcache.php
