2009-05-15 10 views
6

Ho un sito Web che utilizza JQuery AJAX. Con questo codice JQueryOttenere Sessioni senza cookie ASP.NET e JQuery AJAX per giocare insieme bene

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

Quando eseguo questo con cookieless = "false", id presenta in Request.Form. Quando ho creato cookieless = "true", id non è più in Request.Form.

UPDATE, Quello che ho fatto

ho aggiunto una chiamata a Response.ApplyAppPathModifier() per conservare i dati ed evitare un reindirizzamento automatico. Sto escludendo ** Diago ((e cancellando il mio perché i suoi riferimenti danno un po 'di insicurezza a quello che sta succedendo. Mi piace l'idea del dominio separato, ma non posso farlo qui.

Ecco il codice aggiornato:

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

Secondo MSDNResponse.ApplyAppPathModifier() aggiunge l'ID di sessione se si è in stato di sessione senza cookie, e restituisce l'URL inalterata se non siete.

Poiché non esiste un ID di sessione, ASP.NET crea una nuova sessione e esegue un reindirizzamento (eliminando in tal modo qualsiasi dati di forma).

risposta

2

Ho faticato di recente con lo stesso problema. Questo è uno dei quattro inconvenienti dell'utilizzo di sessioni senza cuoco. La richiesta viene riscritta quando si colpisce il server e le variabili della richiesta vengono eliminate. Questo può essere estremamente doloroso quando si utilizzano i servizi Web e la richiesta POST utilizzando ASP.Net. Funziona bene quando si utilizza GET.

Si avrà un problema simile utilizzando il post normale. C'è un articolo here che spiega come può essere fatto. This L'articolo MSDN discute anche gli svantaggi a lungo.

La soluzione migliore consiste nel mettere i servizi su un dominio separato o su un sito virtuale IIS che non utilizzano sessioni senza cookie.

L'utilizzo dell'autenticazione basata su moduli con sessioni senza cuoco è anche una sfida interessante.

0

È necessario includere il token di sessione nella richiesta. ASP.Net deve aggiungerlo nel campo dell'URL o del modulo nascosto. Prendilo e aggiungilo al parametro jquery. Questo è il massimo che posso dire coz non ho mai codificato in ASP.NET

2

Ho perso tutto il giorno per risolvere questo problema, mentre questa è solo una soluzione rapida.

Durante la chiamata PageMethod, l'ID di sessione non viene passato con l'URL di richiesta, pertanto viene generato un nuovo evento session_start. Abbiamo solo bisogno di impostare il percorso esatto della richiesta prima di chiamare uno pagemethod, in modo che il nuovo evento di inizio della sessione non venga attivato.

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);