Website ist nicht Multi-User fähig (Daten werden überschrieben)

02/01/2009 - 21:15 von Konrad Hammerer | Report spam
Hallo!

Ich habe gerade mit Schrecken entdeckt, dass sich auf meiner ASP.NET
WebSite Steuerelement-Inhalte und auch Variablen gegenseitig
überschreiben, wenn sich mehrere Anwender gleichzeitig anmelden.

Beispiele:

1)
Ich habe auf einer Seite eine Table, die ich dynamisch mit Werten aus
einer DB fülle. Wenn die Seite nun im Browser da ist, kann man per Knopf
die Tabelle in ein Excel-Dokument exportieren lassen. Das klappt
solange, bis sich ein anderer ebenfalls anmeldet und diese Seite
anzeigt. Der zweite hat dann andere Daten (sind Anwenderbezogen) auf
seinem Bildschirm. Wenn jetzt der erste nochmal auf "Exportieren"
klickt, dann bekommt er die Daten des anderen ins Excel geschrieben?!?!
Wie kann das sein?

2)
Ich speichere Benutzerdaten in dem Session-Objekt (Username usw.). Wenn
nun einer angemeldet ist, dann passt alles und es werden seine Daten aus
dem Session-Objekt ausgelesen. Wenn nun ein zweiter sich anmeldet, sind
plötzlich dessen Daten in dem Session-Objekt von dem ersten User enthalten!?



Ich bin erlicht gesagt ganz selbstverstàndlich davon ausgegangen, dass
jeder für sich seine eigene Session bzw. kleine Welt auf dem Web-Server
bekommt und nichts gegenseitig überschrieben wird! Habe ich da einen
schweren Denkfehler begangen?

Wie sieht es denn mit Steuerelementen, Session-Variablen (Beispiel:
Session.Item("MeineVar")...) usw. aus? Muss man da extra was machen,
damit das User-bezogen auf dem WebServer ablàuft?

Ich kann diese Probleme im Dev-Studio (2008) mit dem DevServer
nachvollziehen und produktiv verwende ich einen
UltiDev-Cassini-WebServer. Muss ich einen IIS verwender oder mache ich
generell einen Fehler?

Viele Grüße und Danke,
Konrad Hammerer
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
02/01/2009 - 22:37 | Warnen spam
Hallo Konrad,

"Konrad Hammerer" schrieb:

Ich habe gerade mit Schrecken entdeckt, dass sich auf meiner ASP.NET WebSite Steuerelement-Inhalte und auch Variablen gegenseitig
überschreiben, wenn sich mehrere Anwender gleichzeitig anmelden.



dann wirst Du mit an Sicherheit grenzender Wahrscheinlichkeit statische
(Shared bzw. static) Variablen/Properties/Methoden/... oder auch eine
statische Klasse (Module in VB) nutzen. Falls ja, raus damit. In einer
Multiuserumgebung (was eine Webanwendung so gut wie immer ist, wenn man
nicht gerade alleine auf seiner Entwicklungsworkstation rumhantiert)
ist sowas tödlich. Statische Methoden sind noch nicht ganz so schlimm,
wenn man auf Threadsicherheit achtet. Variablen, Properties, ... sind
dann für alle Requests identisch, genauso wie Application Variablen (also
bspw. Application( "Abc" ), die ist für alle Zugriffe dieselbe)

Ich speichere Benutzerdaten in dem Session-Objekt (Username usw.). Wenn nun einer angemeldet ist, dann passt alles und es werden
seine Daten aus dem Session-Objekt ausgelesen. Wenn nun ein zweiter sich anmeldet, sind plötzlich dessen Daten in dem
Session-Objekt von dem ersten User enthalten!?



Das passiert mit Sicherheit nicht. Du wirst hier, wie schon geschrieben,
irgendwo statische Variablen oder Properties verwenden.

Ich bin erlicht gesagt ganz selbstverstàndlich davon ausgegangen, dass jeder für sich seine eigene Session bzw. kleine Welt auf
dem Web-Server bekommt und nichts gegenseitig überschrieben wird! Habe ich da einen schweren Denkfehler begangen?



Sessions sind ohne Probleme verwendbar. Das Problem liegt woanders.

produktiv verwende ich einen UltiDev-Cassini-WebServer.



Wasn das?

Muss ich einen IIS verwender oder mache ich generell einen Fehler?



Ich würde Dir zwar IIS für eine produktive Umgebung ans Herz legen aber
zwingend ist das erstmal nicht.

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen