2009-05-15 5 views
6

J'ai un site web qui utilise JQuery AJAX. Avec ce code JQueryObtenir des sessions sans cookie ASP.NET et JQuery AJAX pour bien jouer ensemble

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

Quand je lance cela avec cookieless = "false", id apparaît dans Request.Form. Lorsque je mets cookieless = "true", id n'est plus dans Request.Form.

UPDATE Ce que j'ai

pour préserver les données et éviter une redirection automatique

j'ai ajouté un appel à Response.ApplyAppPathModifier(). J'excepte ** Diago ((et en supprimant le mien parce que ses références donnent un peu d'insight sur ce qui se passe.) J'aime l'idée du domaine séparé, mais je ne peux pas le faire ici

Voici le code mis à jour:

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

Selon MSDNResponse.ApplyAppPathModifier() ajoute l'identifiant de session si vous êtes dans l'état de session cookieless et renvoie l'URL inchangée si vous n'êtes pas.

Comme il n'y a pas d'identifiant de session, ASP.NET crée une nouvelle session et effectue une redirection (supprimant ainsi Données de formulaire).

Répondre

2

J'ai eu récemment le même problème. C'est l'un des quatre inconvénients de l'utilisation de sessions sans cookie. La requête est réécrite lors de la frappe sur le serveur et les variables de la requête sont supprimées. Cela peut être extrêmement douloureux lors de l'utilisation de WebServices et de la requête POST en utilisant ASP.Net. Cela fonctionne très bien lors de l'utilisation de GET.

Vous aurez un problème similaire en utilisant la poste normale. Il y a un article here qui explique comment cela peut être fait. This L'article MSDN décrit également les inconvénients à long terme. La meilleure solution consiste à placer vos services sur un domaine distinct ou un site virtuel IIS sans utiliser les sessions sans cookie. L'utilisation de Forms Authentication avec des sessions sans cookie est également un défi intéressant.

0

Vous devrez inclure le jeton de session dans votre demande. ASP.Net doit être ajouté dans les champs url ou masqué. Prenez-le et ajoutez-le à l'objet de paramètre jquery. C'est aussi loin que je peux dire parce que je n'ai jamais codé en ASP.NET

2

J'ai perdu toute la journée pour régler ce problème, alors que ce n'est qu'une solution rapide.

Lors de l'appel PageMethod, l'ID de session n'est pas transmis avec l'URL de la requête, de sorte qu'un nouvel événement session_start est déclenché. Nous avons juste besoin de définir le chemin de requête exact avant d'appeler un pagemethod, afin que le nouvel événement de démarrage de session ne soit pas déclenché.

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