6 Stimmen

Wie man ASP.NET Cookieless Sessions und JQuery AJAX zum Zusammenspiel bringt

Ich habe eine Website, die JQuery AJAX verwendet. Mit diesem JQuery-Code

$.post("/ajax/getsomedata.aspx", {'id': id }, 
    function(data) 
    {
        dosomething(data);
    }
);

Wenn ich dies mit cookieless="false" , id taucht auf in Anfrage.Formular . Wenn ich die cookieless="true" , id ist nicht mehr in Anfrage.Formular .

UPDATE, Was ich getan habe

Ich habe einen Aufruf von Response.ApplyAppPathModifier() hinzugefügt, um die Daten zu erhalten und eine automatische Umleitung zu vermeiden. Ich schließe mich **Diago(( an und lösche meinen eigenen Beitrag, da seine Verweise einen Einblick in das Geschehen geben. Ich mag die Idee der separaten Domäne, aber ich kann das hier nicht tun.

Hier ist der aktualisierte Code:

$.post("<%=Response.ApplyAppPathModifier("/ajax/getsomedata.aspx")%>", 
        {'id': id },
    function(data)     
    {        
        dosomething(data);    
    }
);

Nach Angaben von MSDN Response.ApplyAppPathModifier() fügt die Sitzungs-ID hinzu, wenn Sie sich im kochfreien Sitzungszustand befinden, und gibt die unveränderte URL zurück, wenn dies nicht der Fall ist.

Da es keine Sitzungskennung gibt, erstellt ASP.NET eine neue Sitzung und führt eine Umleitung durch (wodurch alle Formulardaten entfernt werden).

2voto

BinaryMisfit Punkte 27769

Vor kurzem hatte ich mit dem gleichen Problem zu kämpfen. Dies ist einer der vier Nachteile der Verwendung von cookieless sessions. Die Anforderung wird neu geschrieben, wenn sie auf den Server trifft, und die Anforderungsvariablen werden gelöscht. Dies kann bei der Verwendung von WebServices und POST-Anfragen mit ASP.Net sehr schmerzhaft sein. Bei der Verwendung von GET funktioniert dies problemlos.

Ein ähnliches Problem haben Sie, wenn Sie die normale Post verwenden. Es gibt einen Artikel aquí in dem erklärt wird, wie es gemacht werden kann. Diese Im MSDN-Artikel werden auch die Nachteile ausführlich erörtert.

Die beste Lösung besteht darin, Ihre Dienste in einer separaten Domäne oder einer virtuellen IIS-Site unterzubringen, die keine cookielosen Sitzungen verwendet.

Die Verwendung der Forms-Authentifizierung mit cookielosen Sitzungen ist ebenfalls eine interessante Herausforderung.

2voto

Ich habe meinen ganzen Tag damit vergeudet, dieses Problem zu lösen, während dies nur eine schnelle Lösung ist.

Während der PageMethod Aufruf wird die Sitzungs-ID nicht mit der Anfrage-URL übergeben, so dass eine neue session_start Ereignis wird ausgelöst. Wir müssen nur den genauen Anfragepfad festlegen, bevor wir ein pagemethod so dass das Ereignis für den Beginn einer neuen Sitzung nicht ausgelöst wird.

if ('<%= HttpContext.Current.Session.IsCookieless %>==True') {
    //need to pass session id in request path
    PageMethods.set_path('<%= System.Web.Configuration.WebConfigurationManager.AppSettings("WebRoot") %>(S(<%=Session.SessionID%>))/secure/PageName.aspx');
}
PageMethods.PageMethodName(param1,param2, CallSuccess, CallFailed);

0voto

Tahir Akhtar Punkte 11147

Sie müssen das Sitzungs-Token in Ihre Anfrage aufnehmen. ASP.Net muss es entweder in die url oder in versteckte Formularfelder einfügen. Greifen Sie es und fügen Sie es jquery Parameter Objekt. Das ist so weit, wie ich sagen kann coz ich habe nie in ASP.NET codiert

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X