Newsgroup: it.comp.www.php
Titolo: Variabile di sessione?

Salve a tutti,
 sono un principiante. ho imparato ieri un po' di php con cui ho messo su 
http://muletto.homelinux.org
 .
ho pero' incontrato un problema: all'accesso prelevo da un file di testo una 
frase a caso che inserisco nella home. adesso ovviamente ad ogni 
aggiornamento della pagina mi viene fuori una frase diversa. Vorrei invece 
che fin quando non si aggiorna l'intera pagina lo stato della variabile 
relativa alla frase rimanga lo stesso.
Come posso mantenere lo stesso stato? dovrei far passare una variabile alla 
pagina stessa ogni volta che la si carica? mi sembra poco buona come idea.
Visto che non mi sono ancora cimentato con le sessioni (ne con un eventuale 
interfacciamento con mysql et simila) mi piacerebbe sapere se qualcuno di 
voi ha qualche altra idea a riguardo.
grazie a chiunque interverra',
paulo 

 relativa alla frase rimanga lo stesso.
Se le frasi sono su un file esterno, una per riga, puoi prendere il
sizeof della pagina, e farne il modulo col numero di righe del file con
le frasi per ricavare un numero di riga da mostrare. Se aggiungi un byte
al file sorgente vai avanti di una riga, se ne togli uno vai indietro di
una riga, "ruotando" (tramite modulo) attorno al file.
Sempre se ho capito bene come procedi.
Bye.
-- 
Alessandro Pellizzari


sizeof della pagina? ovvero conoscere da quanti elementi e' formata 
(caratteri)? ne faccio il modulo col numero di righe ed ottengo un numero 
che ad ogni aggiornamento della pagina mi farebbe comunque apparire una 
frase casuale.
io vorrei che la casualita' rimanesse solo all'accesso o ad un eventuale 
refresh da parte del client. ma non voglio che ogni qualvolta ad esempio si 
clicchi un menu' la frase cambi.
e' anche possibile che io non abbia capito niente di quello che hai detto 
:-)
abbi pazienza,
paulo 

 clicchi un menu' la frase cambi.
Descrivi meglio cosa hai fatto e come vorresti che funzionasse, forse
non ho capito io cosa ti serve.
Bye.
-- 
Alessandro Pellizzari


se vuoi far cambiare la frase solo la prima volta che si accede alla
pagina ti conviene mettere la frase in una variabile di sessione e
inizializzarla solo se non ha già un valore.qualcosa del genere:
session_start();
if(!isset($_SESSION['frase']))
{
	$_SESSION['frase'] = "questa è la frase";
}
echo $_$_SESSION['frase'];

 non ho capito io cosa ti serve.
allora:
considera il file index.php
---
---
---
include ("casaccio.php");
---
---
dove casaccio.php contiene questo codice:
<?
 $f = file("./frasi.txt");
 $c = count($f);
 $n = rand(0, ($c-1));
 print "<i>$f[$n]</i>";
?>
ovviamente in frasi.txt c'e' un tot numero di righe contenenti frasi.
ad ogni refresh casaccio.php viene nuovamente incluso ed il codice che 
contiene nuovamente eseguito.
il refresh avviene non solo su esplicita azione dell'utente, ma anche ogni 
qualvolta si tenti di chiudere od aprire un menu (considera che ogni menu 
passa delle variabili sul suo stato e sullo stato degli altri menu' con la 
forma ?var1=$menu1_aperto&var2=$manu2_aperto&ecc...)
avevo quindi pensato di effettuare in casaccio.php dei controlli di 
variabile. con un discorso simile volevo creare una varibile da passare ogni 
qualvolta avvenga un refresh. per esempio potrebbe essere una variabile di 
tipo booleana. impostata a true potrebbe significare ad esempio che la frase 
e' stata gia' scelta. Il problema e' che non riesco a mantenere in memoria 
il valore della variabile  ($n) che assegnata all'indice dell'array $f mi 
identifichi la frase da riscrivere.
Cio' che non ho ancora capito sono le regole di visibilita' delle variabili 
in php... la variabile $n su index.php e' vuota quindi non posso passarla ad 
ogni click di menu.
scusami se mi sono dilungato
paulo

 echo $_$_SESSION['frase'];
si, avevo pensato anch'io alle sessioni... e che prima volevo trovare una 
soluzione senza utilizzarle. cioe' immagino che prima del php4 il mio 
problema sia stato riscontrato anche da qualcun altro. vorrei capire come 
hanno fatto, anche perche' fino a due giorni fa il php non l'ho mai visto. 
non vorrei mettere troppa carne sul fuoco.
paulo 

pagina stessa ogni volta che la si carica? mi sembra poco buona come idea.
Ma e' la meglio. La sessione fa questo, anche se lo fa automaticamente.
Del resto il protocollo HTTP e' stateless, e quello che vuoi fare tu per
definizione e' stateful - sicche' e' chiaro che devi basarti su qualcosa
che ogni volta ristabilisca lo stato, che dev'essere passato ogni volta.
Le alternative ci sono ma non fanno esatttamente quello che vuoi tu. Per
esempio potresti usare come chiave l'indirizzo IP del richiedente, ma, a
quel punto, finche' non si sconnette/riconnette (e solo se e' dinamico),
vede sempre la stessa frase.
Oppure potresti basarti sull'ora.
Oppure potresti usare un complicato accrocco basato sull'IMS, che piu' o
meno ti si comporta come un cookie: se l'utente NON ti manda "referrer",
o se il "referrer" non contiene il tuo dominio, vuole dire che e' appena
arrivato sulla pagina. A quel punto gli mandi un Last-Modified pari alla
data e ora attuale, e SPERI che gli accessi successivi contengano sia un
"referrer" sia un If-Modified-Since, che userai per scegliere la frase.
Le probabilita' che funzioni sempre sono basse, e comunque e' usabile se
devi fare qualcosa di poco importante, perche' sia rf che ims si possono
falsificare con facilita'. E inoltre il lavoro per mettere su un sistema
come questo e' MOLTO superiore a quello necessario per usare le sessioni
<?
	// Non testato assolutamente -- caveat emptor
	session_start();
	if (!isset($_SESSION['frase']))
		$_SESSION['frase'] = scegli_frase();
	mostra_frase($_SESSION['frase'];
?>
Leonardo .019 EUR
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio