Newsgroup: it.comp.www.php
Titolo: sessioni php

Salve,
vorrei un chiarimento sulla gestione delle sessioni su php.
Allora mettiamo il caso che sviluppo una pagina di login, creo la
classica pagina con il form e la pagina php che controlla se i dati
inseriti nel form sono presenti sul database, a quel punto se ottengo
un riscontro positivo mi salvo tutto in sessione in modo tale da
mantenermi i dati dell'utente che si è loggato.
Poi tutte le volte che navigo in tutte le altre pagine del sito,
visibili solo agli utenti registrati, non mi resta altro che fare solo
un controllo sul settaggio di quelle variabili e se sono piene, in
caso contrario non faccio visualizzare le pagine protette.
e fin qui c siamo, adesso il tutto lo passo su due domini diversi
www.prova1.com
e
www.prova2.com
A questo punto mi autentico su 
www.prova1.com
esempio:
user: admin
pass: admin
la pagina di login controlla il tutto e mi setta le variabili di
sessione. Qui arriva la domanda, se io, mantenendo le variabili di
sessioni settate su 
www.prova1.com
, mi connetto su 
www.prova2.com
 e
senza autenticarmi vado su una delle pagine riservate, le vedo??
oppure ogni sessione è univoca e quelle variabili che ho settato
precedentemente sono associate solo alla sessione del sito 
www.prova1.com
e non funzionanti su 
www.prova2.com
?? sulle pagine riservate io non
faccio altro che controllare solo se le variabili sono settate e se
non sono vuote, però vorrei evitare che un altro utente con le stesse
variabili che si è autenticato dal primo dominio, possa vedere l'area
riservata anche sull'altro dominio.
voi che mi dite??

hdmco...@gmail.com
 ha scritto:

Immagino che stai parlando non soltanto di domini diversi ma anche di 
server diversi.
In questo caso l'unica cosa da fare è passare le session su un db che è 
raggiungibile da entrambi i domini, gestendo ed aggiornando 
continuamente una tabella di session... così semplicemente ad ogni 
aggionamento pagina/pagina nuova controlli se l'utente è loggato e 
aggiorni la session...
E' il meccanismo che usa mamboserver, trovi molti esempi in rete...

 senza autenticarmi vado su una delle pagine riservate, le vedo??
Le variabili che setti in sessione sono riferite semplicemente al session 
id.
Se tu da 
prova2.com
 passi il session id corretto, riattivi la sessione che 
avevi attivato in 
prova1.com
Questo lo puoi ottenere passandola come parametro in GET, per esempio.
E` un (basso) rischio per la sicurezza, quindi qualche provider potrebbe 
aver bloccato il passaggio del session id in GET e consentirlo solo 
tramite cookie (che non e` che sia molto piu` sicuro, ma qualcosina si`).
Bye.

voi che mi dite??
Basta che il dominio 2 imposti una variabile - senza dirlo a nessuno, e
senza mai inviarla da nessuna parte. Se non la trova, ahiahiahiahia'.
	if (isset($_SESSION['is_admin']))
	{
		/* AGGIUNTA */
		$valid = false;
		if (isset($_SESSION['verify_27133k']))
		{
			// Altre verifiche, volendo
			$valid = true;
		}
		if (!$valid)
			die("Session error, please login again");
		/* Fine aggiunta */
 
		... accesso alle pagine riservate
	}
Gia' che ci sei potresti voler fare altri controlli, perche' - secondo
quel che vedo - di generatori di session id poco furbi ce n'e', a giro
per il mondo. Parecchi consentono un allegro session ID guessing senza
fare una piega, session dumping, e cosi' via.
Leonardo
-- 
Linten addie toorin addie,
Linten addie toorin ee,
Linten lowrin lowrin lowrin,
The barnyards of Delgaty

         }
Il problema è che quella variabile poi inizierebbe a divenire
pubblica, visto che l'applicazione che ho sviluppato è un cms che
dovrebbe essere usato da più clienti
io avevo pensato ad un controllo del tipo:
In fase di wizard, di installazione del cms, sul db registro un valore
criptato associato solo al quel dominio e tutte le volte che un utente
passa da un dominio all'altro io verifico se il valore è quello del
dominio corretto
quindi in fase di login, oltre a conservarmi i dati di autenticazione
dell'utente in sessione, conservo anche questo valore. Cosi se un
utente passa su un'altro dominio e riesce in qualche modo ad
utilizzare la stessa sessione, io controllo quel valore in sessione se
è presente sul db, sennò lo butto fuori
anche se mi sembra un po troppo macchinosa come soluzione, e anche
cosi mi sembra ancora non troppo sicuro
voi che ne dite?? avete di meglio da consigliarmi??

select se i dati sono presenti sul db. Però è sempre poco sicuro
No, intendevo, controlli sulla sessione: per es., che venga dallo stesso
IP dal quale e' stata aperta (restano fuori gli utenti di multiproxy? Eh
beh, cavoli loro, eh. Han vorsuto la bicigretta, pedàlino).
Oppure piu' banalmente, quando crei la sessione, salvi il dominio in cui
e' stata creata - tutto.
	if (!isset($_SESSION['verify_domain']))
		$_SESSION['verify_domain'] = $_SERVER['SERVER_NAME'];
	else
		if ($_SESSION['verify_domain'] != $_SERVER['SERVER_NAME'])
			die('Invalid session domain');
...una specie di referer_check piu' carogna :-)
Piu' di cosi', l'unica e' scriverti tu un tuo gestore di sessioni, e per
buona misura salvarle criptate.
