2009-05-15 5 views
6

Ich habe eine Website, die JQuery AJAX verwendet. Mit diesem Code JQueryErhalten von ASP.NET Cookieless Sessions und JQuery AJAX zusammen zu spielen

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

Als ich betreibe diese mit cookieless = "false", id zeigt sich in Request.Form. Wenn ich cookieless = "true", ID ist nicht mehr in Request.Form.

UPDATE: Was ich

tat habe ich einen Anruf zu Response.ApplyAppPathModifier(), um die Daten zu erhalten und eine automatische Umleitung zu vermeiden. Ich bin ausgenommen ** Diago (und löschen meine eigenen, weil seine Referenzen geben einige Insite in was los ist. Ich mag die Idee der separaten Domain, 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 MSDNResponse.ApplyAppPathModifier() fügt die Session-ID, wenn Sie in cookieless Sitzungszustand sind, und gibt die unveränderte URL, wenn Sie es nicht sind.

Da es keine Session-ID ist, ASP.NET erstellt eine neue Sitzung und führt eine Umleitung durch (entfernt also alle anderen) Formulardaten).

Antwort

2

Ich hatte mit dem gleichen Problem in letzter Zeit gekämpft. Dies ist einer der vier Nachteile der Verwendung von Sitzungen ohne Cookies. Die Anforderung wird neu geschrieben, wenn sie den Server trifft und die Anforderungsvariablen fallen gelassen werden. Dies kann sehr schmerzhaft sein, wenn WebServices und POST-Anfragen mit ASP.Net verwendet werden. Dies funktioniert gut mit GET.

Sie werden ein ähnliches Problem mit normaler Post haben. Es gibt einen Artikel here, der erklärt, wie es gemacht werden kann. This MSDN-Artikel diskutiert auch ausführlich die Nachteile.

Die beste Lösung besteht darin, Ihre Dienste auf einer separaten Domäne oder einer virtuellen IIS-Site bereitzustellen, die keine Sitzungen ohne Cookies verwendet.

Verwenden von Forms Authentifizierung mit Sitzungen ohne Cookies ist auch eine interessante Herausforderung.

0

Sie müssen das Sitzungstoken in Ihre Anfrage aufnehmen. ASP.Net muss es in den URL- oder ausgeblendeten Formularfeldern hinzufügen. Ergreifen Sie es und fügen Sie es jquery Parameterobjekt hinzu. Das ist so weit wie ich sagen kann coz ich habe nie in ASP.NET

2

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

Während des Aufrufs PageMethod wird die Sitzungs-ID nicht mit der Anforderungs-URL übergeben. Daher wird ein neues Ereignis session_start ausgelöst. Wir müssen nur den genauen Anforderungspfad vor dem Aufruf einer pagemethod festlegen, damit das neue Sitzungsstart-Ereignis 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);