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
Vous devez vous connecter pour publier un commentaire.
Ici est un poste de responsable d' SWFUpload qui explique comment charger la session à partir d'un IDENTIFIANT stockées dans la Requête.Forme. J'imagine que la même chose serait de travailler pour Yahoo composant.
Note la sécurité des décharges de responsabilité sur la base du poteau.
Hey...le lien semble cassé..u peut mettre à jour?
oui, nous avons besoin de cette! veuillez fournir un nouveau lien!
Trouvé le lien sur la wayback machine
il serait utile si vous pouviez modifier la réponse à inclure le texte
OriginalL'auteur
Vous pouvez obtenir votre id de session à partir du code suivant:
Puis vous pouvez nourrir que dans un champ caché, peut-être, puis accéder à cette valeur par YUI.
C'est juste une obtenir, de sorte que vous espérons-le, ne ont pas de problèmes d'évolutivité. Pour des problèmes de sécurité si, que je ne sais pas.
OriginalL'auteur Seb Nilsson
En s'appuyant sur ce blog, voici une fonction qui devrait vous obtenez la session pour n'importe quel utilisateur en fonction de l'ID de session, si ce n'est pas assez:
OriginalL'auteur Pluto
L'ASP.Net ID de Session est stocké dans
Session.SessionID
de sorte que vous pourrait définir que dans un champ caché, puis de la poster sur la page suivante.Je pense, cependant, que si le redémarrage de l'application, l'id de session expirera si vous n'avez pas stocker vos sessions de sql server.
OriginalL'auteur Espo