Newsgroup: it.comp.www.php
Titolo: Sessioni...queste provocatrici...

<?php
session_start();
$_SESSION['PORC'] = 1;
if (isset($_SESSION['PORC'])){
	switch ($PORC)
	{
		case '1':
			$header = 'header2.php';
			break;
		case '2':
			$header = 'header3.php';
			break;
	}
} else $header = 'header.php';
include ($header);
Queste sono le prime righe di un file index che poi anche in base al
contenuto della sessione dovrebbe caricare l'header giusto. Nella
pagina dove c'è questo codice tutto funziona correttamente. Dopo che
viene caricato l'header si può accedere ad altre pagine, e lì dovrei
fare lo stesso lavoro per quanto riguarda l'header, e lo dovrei fare
conq uesto codice:
if (isset($_SESSION['PORC'])){
	switch ($PORC)
	{
		case '1':
			$header = 'header2.php';
			break;
		case '2':
			$header = 'header3.php';
			break;
	}
} else $header = 'header.php';
include ($header);
Ma in pratica non fa nulla, $_SESSION['PORC'] non è settato, com'è
possibile? Come mai questa variabile scompare?
E' la prima volta che uso le sessioni, ma leggendo 
php.net
 ed altre
fonti non sono riuscito a risolvere questo dilemma.
Attendo impaziente ed imprecando... :D
Tnx

 Tnx
Prego.
Saluti,
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFE//ld5sXXcRsFI+cRAmciAKCIEC1m2P2knA2kH14nOoj8oiqLnwCePf9s
Ya3Q3J5uEGwQPS388ILWbCk=
=HY/O
-----END PGP SIGNATURE-----

 
Anche le altre pagine hanno il session_start(), vero?
	Francesco

 if (isset($_SESSION['PORC'])){
[cut]
Nelle altre pagine, all'inizio, hai inserito session_start()? 
http://it.php.net/manual/en/function.session-start.php
Sulle sessioni:
http://www.php.net/manual/en/ref.session.php
Ciao.
-- 
Federico

 	Francesco
:rolleyes: ops...pensavo bastasse avviare la sessione, ma quello che
ancora non capivo era il come teneva traccia di questa sessione.
Tnx a tutti :)

<?php
session_start();
$_SESSION['sport'] = 2;
$_SESSION['sezione'] = 'home';
require ('/xxx/xxxx/xxx.php');
include (''/xxx/xxx/header.php');
Ho un'altro problema....quello sopra è il codice che ho nell'index che
si richiama l'header subito dopo avere dichiarato le variabili di
sessione. L'header però non riceve a quanto pare queste variabili
<?php
session_start();
if(isset($_SESSION['sport'])) echo'si';
else echo'no';
if(isset($_SESSION['sezione'])) echo'si';
else echo'no';
Infatti questo codice, piazzata in cima ad header, mi restituisce in
entrambi i casi "no". Com'è possibile? L'index si trova su
/dir/sottodir/index.php, mentre l'header su /dir/header.php ...ma non
credo sia questo, anche perchè li ho messi sullo stesso livello e la
cosa non è cambiata :\
Idee?
Tnx

 entrambi i casi "no". Com'è possibile?
Non è che xxx.php fa qualche danno? Perchè senza di lui, copiaincollando 
quanto sopra, viene "sisi" come output (anche se il session_start() in 
header.php direi che non serve).

 header.php direi che non serve).
No, perchè alla fine del file dà gli stessi valori, che sono quelli
che ho quando richiamo anche un altro file.

In pratica trasformando:
include($url . '/pagina.php');
a
include('../pagina.php');
Tutto funziona, ma non capisco il perchè, visto che $url è questa:
$url="
http://www.sito.it
";
Qualcuno capisce il motivo?

 
probabilmente cosě facendo cambi sessione e quindi le variabili non passano

Il 07/09/06 17:34, Vincio ha scritto:

Questo perché il modo in cui avviene l'inclusione è differente a
seconda che si utlizzi un percorso relativo o un percorso assoluto.
Utilizzando un percorso relativo, il codice contenuto nel file da
includere, viene prima incluso e poi eseguito. Questo garantisce al
file incluso di ereditare lo scope delle variabili del file che
include.
Utilizzando un percorso assoluto, il codice contenuto nel file da
includere viene prima eseguito e dopo il risultato viene incluso.
Questo impedisce al file incluso di ereditare lo scope delle variabili
del file che include.
Per quanto riguarda le sessioni, nei due casi sopra descritti avviene
qualcosa del genere. Utilizzando un percorso assoluto, per il file
incluso viene avviata una nuova sessione, la quale non può ovviamente
contenere i dati memorizzati in quella avviata attraverso il file che
lo include. Tutto ciò è possibile "vederlo", verificando sul proprio
server di sviluppo che un codice tipo il seguente:
File a.php
<?php
session_start();
$_SESSION['test'] = 1;
include '
http://localhost/b.php
';
?>
File b.php
<?php
session_start();
echo $_SESSION['test'];
?>
Genera sul server due file di sessione distinti, uno contenente la
variabile test (sessione avviata da a.php) e uno vuoto (sessione
avviata da b.php). Inoltre, viene sollevato un notice (Notice:
Undefined index: test in ...b.php on line ...)
Se si togliesse session_start() dal file b.php - come si dovrebbe fare
se il file venisse incluso usando un percorso relativo -
includendolo, però, con un percorso assoluto, si solleverebbe un
notice: Notice: Undefined variable: _SESSION in ...b.php on line ...
Questo per motivi di sicurezza, altrimenti sarebbe possibile includere
un file esterno in una propria pagina, recuperando i dati salvati in
una sessione altrui.
<?php
session_start();
include '
http://www.
..it';
print_r($_SESSION);
?>
Tutto ciò salvo errori e omissioni, s'intende.
Per ulteriori approfondimenti:
http://it.php.net/manual/en/function.include.php


 Federico
Grandiosa e chiara spiegazione. Grazie mille.
Ciao
Vincenzo

 Tnx
1) In ogni pagina PHP che deve usare la sessione bisogna prima di tutto
lanciare l'istruzione
session_start();
2) Nel caso in cui session_start() sia avviato e non succedesse nulla ,
sei sicuro che l'id della sessione sia stato trasmesso correttamente
via cooke o via url?
Questo te ne puoi accorgere facendo un echo della funzione session_id().