让ASP.NET无Cookie会话和JQuery AJAX很好地协同工作

jrc*_*cs3 6 asp.net cookies ajax jquery session-state

我有一个使用JQuery AJAX的网站.有了这个JQuery代码

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

当我用cookieless ="false"运行它时, id出现在Request.Form中.当我设置cookieless ="true"时,id不再在Request.Form中.

更新,我做了什么

我添加了对Response.ApplyAppPathModifier()的调用以保留数据并避免自动重定向.我除了**Diago((并删除了我自己的因为他的参考文献对正在发生的事情有所了解.我想知道单独的域名,但我不能在这里做到这一点.

这是更新的代码:

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

根据MSDN Response.ApplyAppPathModifier()在您处于无cookie会话状态时添加会话ID,如果不是,则返回未更改的URL.

由于没有会话ID,ASP.NET会创建一个新会话并执行重定向(从而剥离任何表单数据).

Bin*_*fit 2

我最近也遇到了同样的问题。这是使用无 cookie 会话的四个缺点之一。当访问服务器时,请求将被重写,并且请求变量将被删除。当使用 ASP.Net 使用 Web 服务和 POST 请求时,这可能会非常痛苦。使用 GET 时效果很好。

使用普通帖子您也会遇到类似的问题。这里有一篇文章解释了如何做到这一点。这篇MSDN 文章还详细讨论了这些缺点。

最好的解决方案是将您的服务放在单独的域或 IIS 虚拟站点上,而不使用无 cookie 会话。

在无 cookie 会话中使用表单身份验证也是一个有趣的挑战。