Session-Variablen nicht funktionieren
Schreibe ich eine ASP.NET C# - Website, die Zugriff auf Daten aus einer Datenbank und zeigt Sie dem Benutzer zur Anzeige und Bearbeitung. Die spezifischen Daten es zugreift, basiert auf den Benutzer, der sich anmeldet, und den brauche ich für mehrere Nutzer verwenden zu können die Seite gleichzeitig anzeigen und Bearbeiten von verschiedenen Daten, wie Sie dies tun. Ich stolperte über das Konzept der Session-Staaten, und nach viel Lesen und nicht so viel Verständnis. Ich habe auf ein problem stoßen.
In meiner Standard-Seite, die ich tun, um eine Session-variable erstellen:
Session.Add("UserData",userdata);
Habe ich auch schon versucht:
Session["UserData"] = userdata;
Dann in einer späteren Seite, ich mache das, um zu versuchen, es zu nennen:
object myobject = Session["UserData"];
Dieser gibt mir eine Fehlermeldung, die besagt, daß Session["UserData"]
ist nicht auf eine Instanz eines Objekts. Dies ist die Methode, die jeder scheint zu verwenden, ist es etwas, was ich bin fehlt?
Meine Website " konfiguriert ist, die auf IIS zu der Session-State-Modus auf "In Bearbeitung", aber die meisten Leute scheinen, um dies manuell mit Ihrer web.config-Datei. Jedoch, wenn ich versuche, das in meiner web.config Datei, die ich immer begrüßt mit "unbekannter Konfigurationsabschnitt". Mein compiler nicht weiß, was das ist:
<sessionstate mode="inproc"/>
BEARBEITEN, detaillierte code:
MyClass userdata = new MyClass();
userdata.name = "myname";
userdata.number = 5;
Session["UserData"] = userdata;
später...
MyClass mydata = (MyClass)(Session["UserData"]);
Dieser gibt den Fehler zurück, dass Session["UserData"] null ist.
wo haben Sie Session["UserData"] = "Benutzerdaten"; ,, wo sind Sie zuweisen Benutzerdaten an und können Sie fügen Sie den code, so dass wir sehen können. Session["UserData"] sollte funktionieren, oder sollte ich sagen einen Wert haben, wenn Sie Ihnen zugeordnet haben es richtig..
"userdata" ist Pseudo-code hier, ich bin mir 100% sicher, dass diese variable enthält Daten, bevor ich Sie rufen diesen code.
es ist eine benutzerdefinierte Klasse, obwohl, sind die session-Variablen beschränkt, um nur die grundlegenden Klassen?
Sie nicht haben cookies deaktiviert werden?
InformationsquelleAutor Andrew | 2011-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Tatsache, dass Sie können nicht von der session-Modus im web.config ist eine rote fahne für mich etwas seltsam und stinkend geht. So ...
Überprüfen Sie, dass der session-Modus ist unter dem system.web-element das web.config sonst wird es nicht gültig sein.
Überprüfen Sie, dass enableSessionState noch nicht festgelegt wurde auf false im Internet.config oder page-Direktive
Versuchen, um auszuschließen, IIS. Wenn möglich, konvertieren Sie Ihre website, um eine web-app, und führen Sie visual studio, so beginnt er mit seinen eigenen eingebauten web-server. Was passiert dann? Ist der Sitzungsstatus zurück?
Sollte es n ' T einen Unterschied machen, aber wenn Sie nicht tun, wird der test im Page_Load-dann probieren Sie es dort - nur für den Fall Sie tun, diese tests irgendwo ungewöhnliche.
Was auch immer die Antwort ist, wenn wir wissen, es wird headachingly offensichtlich. Ich bin geninuely gespannt, was es ist. Viel Glück
InformationsquelleAutor Crab Bucket
Session-Variablen sind gut zu verwalten mehrerer Benutzer auf Ihre website, aber Sie zu initialisieren, sollten Sie die Global.asax-Datei in Ihrer web-Anwendung. Diese Datei hat zwei Methoden, die speziell für Session-Variablen, Session_Start und Session_End. Initialisieren Sie Ihre Session-variable, die Sie verwenden würden, code mochte, der folgenden, die in Global.asax:
Auch Sie haben können, um cast wird der Wert der session-variable, wenn Sie tun-Operationen wie +, zum Beispiel, wenn Sie eine session-variable halten Sie einen integer-Wert haben, müssen Sie möglicherweise zu tun, wie die folgenden:
Auch, wenn Sie versuchen, Ihre session-variable außerhalb einer Methode wie Page_Load-oder andere Methode, wie der Versuch, verwenden Sie es als eine Eigenschaft des Systems.Web.UI.Page-Klasse in der C# - code-behind-Datei, das kann nicht funktionieren, Sie können nur verwenden Ihre session-Variablen innerhalb einer Methode.
InformationsquelleAutor Michael G. Workman
InformationsquelleAutor Travis J
Ich würde die Suche für alle Anrufe
Session.Clear
oderSession.Abandon
um zu sehen, wenn Ihre Sitzung gelöscht zwischen diesen beiden Aktionen.Könnte man auch Haken bis zu der
Session_End
Ereignis und sehen, wenn Sie getroffen wird, irgendwann in zwischen den anrufen.InformationsquelleAutor Jacob G
Wo Sie haben
Session.Add("UserData",userdata);
Sie wollen überprüfen Sie den Wert, den Sie brauchen, um CASTET das Objekt mit (string), wie dies
könnte man dann eine Prüfung durchführen, um zu sehen,
if(string.IsNullOrEmpty(userdata))
aber nicht sicher sind, wie Sie sind Initialisierung und Zuweisung a einen Wert zu userdata
InformationsquelleAutor MethodMan
Tut es beschweren sich das Ihre
myobject
null ist oder, dassSession
null ist? Wenn Sie versuchen zum abrufen des Werts, den Sie dabei von der Methode, welche Klasse?Noch eine andere Frage - durch Zufall sind Sie versuchen, es in einem parallelen thread?
InformationsquelleAutor mfeingold