Posso colocar uma identificação de sessão do ASP.Net em um campo de formulário oculto?

Estou usando o Yahoo Uploader, parte da Yahoo UI Library, no meu site ASP.Net para permitir que os usuários enviem arquivos. Para quem não conhece, o remetente funciona usando um applet Flash para me dar mais controle sobre a caixa de diálogo FileOpen. Posso especificar um filtro para os tipos de arquivo, permitir a seleção de vários arquivos etc. É ótimo, mas possui a seguinte limitação documentada:

Devido a um bug conhecido do Flash, o Uploader em execução no Firefox no Windows não envia os cookies corretos com o upload; em vez de enviar cookies do Firefox, ele envia os cookies do Internet Explorer para o respectivo domínio. Como solução alternativa, sugerimos o uso de um método de upload sem cook ou anexar document.cookie à solicitação de upload.

Portanto, se um usuário estiver usando o Firefox, não posso confiar nos cookies para persistir na sessão ao enviar um arquivo. Preciso da sessão deles, porque preciso saber quem são eles! Como solução alternativa, estou usando o objeto Application da seguinte maneira:

Guid UploadID = Guid.NewGuid();
Application.Add(Guid.ToString(), User);

Então, estou criando um ID exclusivo e usando-o como uma chave para armazenar oPage.User objeto no escopo do aplicativo. Eu incluo esse ID como uma variável no POST quando o arquivo é carregado. Em seguida, no manipulador que aceita o upload do arquivo, pego o objeto User da seguinte maneira:

IPrincipal User = (IPrincipal)Application[Request.Form["uploadid"]];

Isso realmente funciona, mas tem duas desvantagens evidentes:

Se o IIS, o pool de aplicativos ou apenas o aplicativo for reiniciado entre o momento em que o usuário visita a página de upload e realmente faz o upload de um arquivo, o "uploadid" é excluído do escopo do aplicativo e o upload falha porque não consigo autenticá-los .

Se eu escalar para um cenário de web farm (possivelmente até mesmo um web garden), isso será completamente interrompido. Talvez eu não esteja preocupado, mas pretendo dimensionar esse aplicativo no futuro.

Alguém tem uma maneira melhor? Existe uma maneira de eu passar a identificação real da sessão do ASP.Net em uma variável POST e usá-la na outra extremidade para recuperar a sessão?

Eu sei que posso obter o ID da sessão atravésSession.SessionIDe sei como usar o YUI para publicá-lo na próxima página. O que eu não sei é como usar issoSessionID para pegar a sessão do servidor de estado.

Sim, estou usando um servidor de estado para armazenar as sessões, para que elas persistam na reinicialização do aplicativo / IIS e funcionem em um cenário de web farm.

questionAnswers(4)

yourAnswerToTheQuestion