Newsgroup: it.comp.java
Titolo: getSession() e sessioni che si 'accavallano'.

Ciao a tutti,
ho un problema a livello di sessione di alcune Servlet. Utilizzo Weblogic 5.1
con IIS come web server. Il problema è questo: quando più utenti accedono alla
mia applicazione si accavallano tra loro le diverse sessioni.
Ho utilizzato il metodo getSession() per prendere la sessione nel metodo
service della servlet. Una volta presa, la sessione, viene utilizzata anche in
altri metodi della servlet che caratterizzano i vari step della navigazione.
L’accavallamento delle sessioni succede nel momento in cui un utente, diciamo
Pippo, inserisce il suo codice identificativo, a cui sono collegate
informazioni SOLO di quell’utente, e altri “n” utenti cliccano simultaneamente
sulle varie voci di menu, una delle quali richiama la funzione che è utilizzata
da Pippo rubandogli quindi le informazioni e sostituendosi a lui. Qualcuno è in
grado di dirmi qual è il problema o se ho sbagliato qualcosa?
Grazie in anticipo.
-- 
Posted from  [146.133.1.30] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Ciao,
senza codice è difficile però tieni presente che:
1. se metti le informazioni di Pippo in variabili di istanza della 
Servlet queste sono viste anche da tutti i Thread che eseguono il 
metodo service() in risposta alle richieste degli altri utenti; 2. se 
stai usando i cookie per l'ID di sessione e gli altri Browser li apri 
sulla stessa macchina questi parteciperanno alla stessa sessione di 
Pippo (IE 5.0 a parte) -- Stefano 

 grado di dirmi qual è il problema o se ho sbagliato qualcosa?
Gestisci male le sessioni, che sono ideate proprio per ovviare a questi
problemi...
ti consiglio un link, leggilo bene :)
http://java.sun.com/docs/books/tutorial/servlets/client-state/index.html
Giuseppe

"Giuseppe Acito" <giuseppeacito@ERASE_MEmclink.it> wrote in message
news:9rkl4t$c91$1...@pegasus.tiscalinet.it...

Grazie ad entrambi,
ho letto anche il link del tutorial
http://java.sun.com/docs/books/tutorial/servlets/client-state/index.html
e penso di aver individuato l’errore… le servlet erano così strutturate:
public class MiaServlet extends HttpServlet { 
 
	String pippo;
	….
	….
	HttpSession sessione;
public void service(.....) { 
               	 ... 
                	sessione= sessione=req.getSession();
                	... 
} 
public void metodoPrimo(.....) { 
               	 ... 
                	sessione= sessione=req.getSession();
                	... 
} 
public void metodoSecondo(.....) { 
               	 ... 
                	sessione= sessione=req.getSession();
                	... 
} 
}
Quindi penso che il problema di accavallamento fosse dovuto al fatto di
definire “sessione” come variabile di classe.
Ora ho risolto effettuando le seguenti modifiche:
public class MiaServlet extends HttpServlet { 
 
	String pippo;
	….
 
public void service(.....) { 
               	 ... 
                	HttpSession sessione= sessione=req.getSession();
                	... 
} 
public void metodoPrimo(.....) { 
               	 ... 
                	HttpSession sessione= sessione=req.getSession();
                	... 
} 
public void metodoSecondo(.....) { 
               	 ... 
                	HttpSession sessione= sessione=req.getSession();
                	... 
} 
}
Ora sto facendo le modifiche e devo ancora testare… sarà un lavoro piuttosto
lungo:-(
Secondo voi poteva essere questo l’errore? A me sembra di aver imbroccato la
strada giusta.
Grazie per l’aiuto.


 wrote in message
news:Usenet.qhqhghdo@localhost...

Grazie ad entrambi,






}





}

Grazie per l’aiuto.
-- 


 Ora sto facendo le modifiche e devo ancora testare. sarà un lavoro


 secondo voi ho sbagliato a fare una cosa del genere???
sì, se non ti ha dato problemi è forse perchè non hai provato a
con più client.
Devi tenere presente che, a meno che un servlet non implementi
SingleThreadModel il Web Container ne istanzia una sola copia
e per ogni richiesta dei client un Thread diverso eseguirà il
metodo service().
Quindi le variabili di istanza della servlet sono condivise da
tutti i Thread.
Se vuoi avere una variabile diversa per ogni Thread devi dichiararla
nel metodo service(), in questo modo nello stack di attivazione del
metodo service() esisterà un copia locale a quell'invocazione del metodo
che non sarà condivisa da altre eventuali invocazioni concorrenti del metodo
service().
ciao
--
Stefano