Puis-je mettre un ASP.Net ID de session dans un champ de formulaire masqué?

Je suis en utilisant le Yahoo Uploader, une partie de la Yahoo Bibliothèque d'INTERFACE utilisateur, sur mon ASP.Net site web pour permettre aux utilisateurs de télécharger des fichiers. Pour ceux qui ne connaissent pas, le chargeur fonctionne en utilisant un applet Flash pour me donner plus de contrôle sur le dialogue FileOpen. Je peux spécifier un filtre pour les types de fichiers, permettre à plusieurs fichiers sélectionnés, etc. C'est génial, mais il a documenté limitation:

À cause d'un Flash bug, le programme de transfert de course dans Firefox sous Windows n'envoie pas le bon cookies avec le téléchargement; au lieu d'envoyer les cookies de Firefox, il envoie à Internet Explorer, les cookies pour le domaine respectif. Comme solution, nous vous suggérons à l'aide d'un cookieless méthode de téléchargement, ou l'ajout d'un document.cookie pour le téléchargement à la demande.

Donc, si un utilisateur utilise Firefox, je ne peux pas compter sur les témoins de persister leur session lorsqu'ils téléchargent un fichier. J'ai besoin de leur session parce que j'ai besoin de savoir qui ils sont! Comme solution de contournement, je suis à l'aide de l'objet de l'Application ainsi:

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

Donc, je suis de la création d'un IDENTIFIANT unique et de l'utiliser comme une clé pour stocker les Page.User objet dans le champ d'Application. Je comprend que l'ID de la variable dans le POST quand le fichier est téléchargé. Ensuite, dans le gestionnaire qui accepte l'upload de fichier, je prends l'Utilisateur de l'objet ainsi:

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

Cela fonctionne, mais il a deux inconvénients flagrante:

  • Si IIS, l'application de la piscine, ou même simplement l'application est redémarrée entre le moment où l'utilisateur visite la page de téléchargement, et en fait, télécharge un fichier, leur "uploadid" est supprimé de la portée de l'application et le téléchargement échoue parce que je ne peux pas les authentifier.
  • Si jamais je l'échelle d'une batterie de serveurs web (peut-être même un jardin web) scénario, il va complètement briser. Je ne pourrais pas être inquiet, sauf que je ne plan sur l'extension de cette application dans le futur.

Quelqu'un aurait-il une meilleure façon? Est-il un moyen pour moi de passer le réel ASP.Net ID de session dans une variable POST, puis utilisez l'IDENTIFIANT à l'autre bout de récupérer la session?

Je sais que je peux obtenir l'ID de session par le biais de Session.SessionID, et je sais comment les utiliser YUI de le poster à la page suivante. Ce que je ne sais pas est comment faire pour l'utiliser SessionID de saisir la session à partir de l'état du serveur.

Oui, je suis en utilisant un serveur d'état pour stocker les sessions, de sorte qu'ils persistent application/IIS redémarre et fonctionne dans une batterie de serveurs web scénario.

OriginalL'auteur Josh Hinman | 2008-09-04