我有一个使用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 如果您处于无Cookie会话状态,则Response.ApplyAppPathModifier()会添加会话ID,如果不是,则返回未更改的URL。
由于没有会话ID,ASP.NET会创建一个新会话并执行重定向(从而剥离任何表单数据)。
答案 0 :(得分:2)
我最近遇到了同样的问题。这是使用无cookie会话的四个缺点之一。命中服务器时请求被重写,请求变量被删除。使用ASP.Net使用WebServices和POST请求时,这可能会非常痛苦。这在使用GET时工作正常。
使用普通帖子你会遇到类似的问题。有一篇文章here解释了如何完成它。 This MSDN文章也详细讨论了这些缺点。
最佳解决方案是将您的服务放在单独的域或IIS虚拟站点上,而不是使用无Cookie会话。
在无Cookie会话中使用表单身份验证也是一个有趣的挑战。
答案 1 :(得分:2)
我浪费了一整天来解决这个问题,而这只是一个快速解决方案。
在PageMethod
调用期间,会话ID未与请求URL一起传递,因此新的session_start
事件将被触发。我们只需要在调用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);
答案 2 :(得分:0)
您必须在请求中包含会话令牌。 ASP.Net必须在url或hidden表单字段中添加它。抓住它并添加它jquery参数对象。 这就是我可以说因为我从来没有在ASP.NET中编码