Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Problemi con l'oggetto Session
martedì 30 gennaio 2007 - 11.06
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Carlo_
Profilo
| Newbie
6
messaggi | Data Invio:
mar 30 gen 2007 - 11:06
Salve ragazzi, sto utilizzando un oggettino per la gestione dello scanner inglobato in una pagina web.. da questo oggetto devo poi richiamare un altra pagina che fa sempre parte del sito ma facendo questo mi crea un'altra sessione e perdo quella precedente e di conseguenza perdo le variabili in essa.. Qualcuno mi sa dare una soluzione per non perdere i dati? Grazie
trasportation
Profilo
| Junior Member
104
messaggi | Data Invio:
mar 30 gen 2007 - 11:24
Non si utilizzano le Sessioni, sono abolite
.
Le Sessioni sono un'invenzione per facilitare il lavoro ma dal punto di vista performante lato server sono un disastro (anche se .Net ha migliorato la gestione delle memoria).
Il mio consiglio è quello di utilizzare il passaggio delle informazioni tra le pagine tramite post o get oppure puoi utilizzare l'oggetto Cache (questo oggetto però ragiona per applicazione non per sessione utente quindi i dati sono visibili da tutte le sessioni utente connesse al server) dipende dal tipo di informazioni che vuoi passare.
R.
/*
* web:
http://www.robertobeccari.it
*/
Carlo_
Profilo
| Newbie
6
messaggi | Data Invio:
mar 30 gen 2007 - 11:57
Scusa ma sono un neofita sia del .net che del web in generale.
Ad ogni modo io ho questo controllo che importo nella mia pagina in questo modo.
<object id="Scan" classid="..oggetto " style="width: 100%; height: 60%"></object>
questo oggetto esegue una serie di cose e alla fine mi salva un file in locale.
Al momento del click di un bottone di questo oggetto io mi recupero il file da locale e lo rimando ad un'altra pagina asp con un metodo di una classe dell'oggetto in questione dovendogli passare come parametro propio l'url della pagina.
Questa però dovrebbe tenersi memoria anche di un altra variabile di identificazione dell'utente logato perchè quest'ultima mi serve per le abilitazioni di alcune funzioni della pagina. Ora non credo di poter utilizzare l'oggetto Cache perchè appunto dovrei tener traccia solo all'interno della sessione utente della cosa. Immagino che dovrei riuscire a passare l'identificazione dell'utente all'oggettino e poi successivamente passarlo come parametro alla pagina che richiamo. Ma non so come eseguire il primo passaggio..
trasportation
Profilo
| Junior Member
104
messaggi | Data Invio:
mar 30 gen 2007 - 12:26
Mi fai un esempio della chiamata che fai?
/*
* web:
http://www.robertobeccari.it
*/
Carlo_
Profilo
| Newbie
6
messaggi | Data Invio:
mar 30 gen 2007 - 12:59
certo..l'oggetto in questione è della atalasoft.. nella pagina web lo richiamo
<object id="Scan" classid="../TwainControl.dll#TwainControl.Twain" style="width: 100%; height: 60%"></object>
..quindi questo è il metodo dell'oggetto richiamato
public Twain()
{
InitializeComponent();
this.acquisition1.FileTransfer += new FileTransferEventHandler(acquisition1_FileTransfer);
......
}
..poi dall'evento del bottone salva eseguo il seguente codice..
private void btnSalva_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream(percorso file tiff, FileMode.Open, FileAccess.Read);
Atalasoft.Twain.HttpPost post = new Atalasoft.Twain.HttpPost(System.Drawing.Imaging.ImageFormat.Tiff);
post.FormData.Add("image1", fs,nomeFileTiff, null);
string retVal = post.PostData(""http://localhost...");
}
..questo di seguito è invece il codice della pagina che riceve..
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Files.Count != 0)
{
fileName = System.IO.Path.GetFileName(Request.Files[0].FileName);
...
...
}
}
..come si vede da qui mi passo un filestream e me lo recupero..ma oltre a questo come detto dovrei tenermi traccia dell'utente.. eventualmente FormData è una collection e potrei inserirlo li ma il problema ritengo sia passarlo all'oggetto Twain
trasportation
Profilo
| Junior Member
104
messaggi | Data Invio:
mar 30 gen 2007 - 13:13
Mi aspettavo una cosa del genere, l'oggetto esegue un post ad un pagina (dipende probabilmente da quello il fatto che perdi la sessione) e questo genera una nuova chiamata al server (generando una nuova sessione).
Sì, devi inserire l'id del tuo utente come dato da postare alla tua pagina, potresti fare una cosa del genere
post.FormData.Add("userId", myId);
e nella pagina di destinazione
Request.Forms["userId"];
In questo modo dovresti ritrovarti il tutto.
/*
* web:
http://www.robertobeccari.it
*/
trasportation
Profilo
| Junior Member
104
messaggi | Data Invio:
mar 30 gen 2007 - 13:18
>Molto utile è anche passare i valori tramite context.items o
>tramite le proprietà della pagina
>
http://www.dotnethell.it/tips/ServerTransferASPNET.aspx
Credo che il problema per lui rimanga, dal momento che l'oggetto che utilizza genera una nuova chiamata al server perdendo quindi il contesto corrente perchè non è lui a eseguire la chiamata ma l'oggetto che ha instanziato.
Non sò, non conosco l'oggetto che utilizza e non posso provare l'applicazione, magari sbaglio.
R.
/*
* web:
http://www.robertobeccari.it
*/
Carlo_
Profilo
| Newbie
6
messaggi | Data Invio:
mar 30 gen 2007 - 13:45
>Mi aspettavo una cosa del genere, l'oggetto esegue un post ad
>un pagina (dipende probabilmente da quello il fatto che perdi
>la sessione) e questo genera una nuova chiamata al server (generando
>una nuova sessione).
>
>Sì, devi inserire l'id del tuo utente come dato da postare alla
>tua pagina, potresti fare una cosa del genere
>
>post.FormData.Add("userId", myId);
>
>e nella pagina di destinazione
>
>Request.Forms["userId"];
>
>In questo modo dovresti ritrovarti il tutto.
>
>/*
> * web:
http://www.robertobeccari.it
> */
>
ok con il formatdata passo l'idUtente dall'oggetto alla pagina verso la quale faccio il post ma come faccio a passare il myId all'oggetto in questione dalla pagina web nel quale risiede..partendo dal fatto che ho questo valore nell'oggetto Session della pagina.. non vogliatemene ma sto mantenendo un progetto gia fatto.. sapendo che richiamo l'oggetto con il codice html che leggete qualche post più su..
trasportation
Profilo
| Junior Member
104
messaggi | Data Invio:
mar 30 gen 2007 - 14:03
Scusa ma non capisco il problema
abbi pazienza.
Il valore che si trova nella variabile di sessione lo metti tra i dati da postare all'altra pagina.
post.FormData.Add("userId", Session["NomeVariabile"]);
che cosa c'è dentro la variabile di sessione che non puoi passare in post all'altra pagina??
Forse mi sfugge qualcosa...
R.
/*
* web:
http://www.robertobeccari.it
*/
Carlo_
Profilo
| Newbie
6
messaggi | Data Invio:
mar 30 gen 2007 - 15:55
forse dico una stupidaggine ma penso che l'oggetto Session sia relativo solo alle pagine web per cui non ce l'ho nel codice del controllo Twain..o mi sbaglio?!..
trasportation
Profilo
| Junior Member
104
messaggi | Data Invio:
mar 30 gen 2007 - 16:18
Questa domanda mi fà pensare che tu non sappia bene come funzioni una pagina ASP.net
.
La Sessione, non appartiene a nessuno (nel senso che viene creata alla tua prima richiesta di una pagina al server, poi .net provvede a portarsela dietro per ogni pagina), te lo ritrovi come oggetto della pagina solo per comodità, in un certo senso sono le pagine che appartengono all'oggetto sessione non il contrario è un'oggetto trasversale a tutte le pagine del tuo sito, è per questo che te la perdi quando utilizzi l'oggetto per il post dei dati ad un'altra pagina perchè viene generata una nuova sessione.
Ma tornando al discorso precedente perchè non metti le informazioni della sessione nella collection del post e lo riprendi nella pagina di destinazione??.
R.
/*
* web:
http://www.robertobeccari.it
*/
Carlo_
Profilo
| Newbie
6
messaggi | Data Invio:
mar 30 gen 2007 - 17:16
Infatti hai ragione..è da poco che che lavoro in questo ambiente e ti ringrazio per le informazioni e la pazienza..
comunque il fatto è che io ho anche provato a scrivere sull'evento del controllo la seguente riga..
post.FormData.Add("UserId", HttpContext.Current.Session["UserId"].ToString())
..ma mi crea un'eccezione del tipo
System.NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto..
..naturalmente ho testato e nella pagina web che contiene il controllo l'istruzione
HttpContext.Current.Session["UserId"].ToString() mi ritorna il valore..mentre nel controllo no..
..forse devo abbandonare questa ipotesi..
trasportation
Profilo
| Junior Member
104
messaggi | Data Invio:
mar 30 gen 2007 - 17:44
L'errore è dovuto al fatto che nel momento della richiesta non esiste nessuna variabile di sessione con quel nome.
Quando metti le informazioni dell'utente connesso all'interno della variabile di Sessione???
devi sempre verificare che la variabile esista, (Session["UserId"]!=null).
No, non devi abbandonare questa strada, perchè come idea è corretta, devi capire il perchè hai il problema.
Purtroppo senza il codice non ti posso aiutare, hai provato a lanciare l'applicazione sotto debug?
R.
/*
* web:
http://www.robertobeccari.it
*/
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !