Kann ich eine ASP.Net session-ID in einem versteckten Formularfeld?

Ich bin mit der Yahoo-Uploader, die Teil der Yahoo UI-Bibliothek, auf meinem ASP.Net website, um Benutzern das hochladen von Dateien. Für diejenigen, die nicht, der uploader arbeitet mit einem Flash-applet, um mir mehr Kontrolle über den FileOpen-dialog. Ich kann geben Sie einen filter für die Datei-Typen können mehrere Dateien ausgewählt werden, etc. Es ist toll, aber es hat die folgenden dokumentierte Einschränkung:

Aufgrund eines bekannten Flash-bug, der Uploader läuft in Firefox in Windows sendet nicht die richtigen cookies mit dem upload, anstatt Firefox cookies, sendet Internet Explorer die cookies für die entsprechende domain. Als workaround empfehlen wir entweder die Verwendung einer cookieless-upload-Methode oder Dokument Anhängen.cookie, um die upload-Anfrage.

So, wenn ein Benutzer mit Firefox, ich kann nicht auf cookies angewiesen, um fortbestehen Ihrer Sitzung, wenn Sie eine Datei hochladen. Ich brauche Ihre Sitzung, weil ich muss wissen, wer Sie sind! Als workaround bin ich mit dem Application-Objekt folgendermassen:

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

So, ich bin momentan dabei, eine eindeutige ID und verwenden Sie es als Schlüssel zum speichern der Page.User Objekt in den Anwendungsbereich. Ich habe gehört, dass ID als variable in die POST, wenn die Datei hochgeladen ist. Dann, in der Prozedur, akzeptiert die Datei hochladen, ich grab das User-Objekt folgendermassen:

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

Dies tatsächlich funktioniert, hat es aber zwei eklatante Nachteile:

  • Wenn IIS app pool, oder auch nur die Anwendung neu gestartet wird zwischen der Zeit, die der Nutzer besucht die Seite hochladen, und tatsächlich lädt eine Datei hoch, deren "uploadid" gelöscht Anwendungsbereich und der upload schlägt fehl, weil ich nicht authentifizieren kann Ihnen.

  • Wenn ich je Skala zu einem web-farm (vielleicht sogar einem web-garden-Szenario, wird dies vollständig zu brechen. Ich könnte nicht besorgt sein, es sei denn, ich Plane auf die Skalierung dieser app in der Zukunft.

Hat jemand eine bessere Möglichkeit? Gibt es eine Möglichkeit, für mich zu passieren, die tatsächliche ASP.Net session-ID in einer POST-variable, dann verwenden Sie die ID am anderen Ende zum abrufen der session?

Ich weiß, ich kann get die session-ID durch Session.SessionID, und ich weiß, wie Sie YUI, um es auf der nächsten Seite. Was ich nicht weiß ist, wie zu verwenden, dass SessionID zu greifen, die Sitzung von der state-server.

Ja, ich bin mit der state-server zum speichern der Sitzungen, so dass Sie fortbestehen Anwendung/IIS neu gestartet, und arbeiten in einer web-farm-Szenario.

InformationsquelleAutor Josh Hinman | 2008-09-04
Schreibe einen Kommentar