2009-05-15 11 views
6

Tengo un sitio web que usa JQuery AJAX. Con este código jQueryObtener sesiones sin cookies ASP.NET y JQuery AJAX para jugar juntas muy bien

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

Cuando ejecuto esto con sin cookies = "false", Identificación aparece en Request.Form. Cuando configuro cookieless = "true", id ya no está en Request.Form.

UPDATE Lo que hice

que añade una llamada a Response.ApplyAppPathModifier() para conservar los datos y evitar una redirección automática. Estoy exceptuando ** Diago ((y borrando el mío porque sus referencias dan un poco de contexto sobre lo que está pasando. Me gusta la idea del dominio separado, pero no puedo hacer eso aquí.

Aquí está el código actualizado:

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

Según MSDNResponse.ApplyAppPathModifier() añade el identificador de sesión si se encuentra en estado de sesión sin cookies, y devuelve la URL inalterado si no está.

Puesto que no hay id de sesión, ASP.NET crea una nueva sesión y hace una redirección (eliminando así cualquier datos de formulario).

Respuesta

2

Luché con el mismo problema recientemente. Este es uno de los cuatro inconvenientes del uso de sesiones sin cookies. La solicitud se reescribe al presionar el servidor y las variables de solicitud se descartan. Esto puede ser extremadamente doloroso al usar WebServices y la solicitud POST usando ASP.Net. Esto funciona bien cuando se usa GET.

Tendrá un problema similar con la publicación normal. Hay un artículo here que explica cómo se puede hacer. This El artículo de MSDN también discute los inconvenientes extensamente.

La mejor solución es poner sus servicios en un dominio separado o el sitio virtual de IIS que no utiliza sesiones sin cookies.

Uso de formularios Autenticación con sesiones sin cookies también es un desafío interesante.

0

Deberá incluir el token de sesión en su solicitud. ASP.Net debe agregarlo en los campos url u ocultos. Cógelo y añádelo al objeto de parámetro jquery. Eso es todo lo que puedo decir porque nunca he codificado en ASP.NET

2

Perdí todo el día para resolver este problema, aunque esto es solo una solución rápida.

Durante la llamada PageMethod, la identificación de la sesión no se pasa con la URL de la solicitud, por lo que se desencadena un nuevo evento session_start. Solo debemos establecer la ruta de solicitud exacta antes de llamar a pagemethod, para que el nuevo evento de inicio de sesión no se active.

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