Domanda

Questa domanda è correlata a Questo, anche se penso di essere stato un po' troppo prolisso per ottenere davvero una buona risposta.Sarò breve.

Sto lavorando su un gestore web (ashx) che accetta un post di modulo da una pagina aspx.Quando il gestore riceve questo post del modulo, per fare ciò che deve fare, deve conoscere l'utente che ha effettuato l'accesso (User.Identity.Name), ma non posso fare affidamento sui cookie inviati dal browser.

So che posso ottenere Session.SessionID e inserirlo in un campo del modulo nascosto, ma una volta che il mio gestore riceve il post del modulo, come posso utilizzare quel SessionID per capire l'identità dell'utente che ha effettuato l'accesso?

Sto utilizzando la modalità StateServer per lo stato della sessione.

È stato utile?

Soluzione 2

Jonas ha pubblicato un'ottima risposta a questa domanda qui:

Posso inserire un ID sessione ASP.Net in un campo modulo nascosto?

Altri suggerimenti

Penso che tu possa farlo implementando il IReadOnlySessionState interfaccia sul tuo HttpHandler

A meno che non sia necessario utilizzare direttamente la sessione, è sempre possibile archiviare qualsiasi informazione sull'identità dell'utente che ha effettuato l'accesso in un dizionario singleton o in una cache e farvi riferimento tramite SessionID archiviato in un campo nascosto.Personalmente vedo problemi di sicurezza in questo, ma non li approfondirò.Prenderei in considerazione l'emissione di identità monouso per questo tipo di implementazione.

In un'implementazione HttpHandler o HttpModule, non è sempre possibile accedere alla sessione dall'evento BeginRequest.C'è un altro evento che puoi gestire, chiamato OnAcquireRequestState.Se scrivi il tuo codice in quell'evento, HttpContext.Current.Session non sarà nullo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top