6

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

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

当我使用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);    
    }
);

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

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

4

3 回答 3

2

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

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

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

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

于 2009-05-15T17:31:58.630 回答
2

我浪费了一整天的时间来解决这个问题,而这只是一个快速解决方案。

PageMethod调用期间,会话 ID 没有与请求 URL 一起传递,因此session_start会触发一个新事件。我们只需要在调用 a 之前设置确切的请求路径pagemethod,这样新的会话开始事件就不会被触发。

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);
于 2012-08-28T16:00:23.620 回答
0

您必须在请求中包含会话令牌。ASP.Net 必须将其添加到 url 或隐藏的表单字段中。抓住它并添加它 jquery 参数对象。据我所知,因为我从未在 ASP.NET 中编写过代码

于 2009-05-15T15:21:58.473 回答