【发布时间】:2011-03-10 07:59:17
【问题描述】:
我在 ASP.NET 中创建了 HttpHandler 类并配置了一个网站来处理任何带有 *.test 路径的请求。
public class GameHandler : IHttpHandler, IRequiresSessionState
{
public bool IsReusable
{
get
{
return false;
}
}
public void ProcessRequest (HttpContext context)
{
if (context.Request.ContentType == "application/json; charset=utf-8")
{
...
switch (parameters ["type"])
{
case "Setup":
result = Setup (context);
break;
case "DoStep":
result = DoStep (context, parameters);
break;
}
...
}
else
context.Response.Write (@"
<html>
<head>
</head>
<body>
<!-- some HTML -->
</body>
</html>"); // this is returned on first request
}
在Setup方法中我有这样一段代码:
context.Session ["Game"] = new Game ();
然而,在 DoStep 方法中,context.Session.Count = 0 并且 context.Session["Game"] 为 NULL。 在客户端,我使用 jquery 来调用这些函数。这样的调用如下所示:
$.ajax({
url: "/test.test",
type: "POST",
data: "{'type':'Setup'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {...}
});
$.ajax({
url: "/test.test",
type: "POST",
data: "{'type':'DoStep','row':'" + row + "','column':'" + column + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {...}
});
我怀疑问题在于 ASP.NET 不知道这些从 javascript 发送的请求属于同一个会话,这就是会话值丢失的原因。我认为我需要发回一些 cookie 信息或其他东西以识别下一个请求,但事实是我不知道。
非常感谢任何帮助。
【问题讨论】:
-
也许你可以比较一下来自服务器的会话 ID 和你在客户端的会话 ID(cookie、url)?
-
编辑:这不是你问here的问题的重复吗?
-
是的,也是同样的问题,不过这里我描述得比较深入,目前还没有什么好的答案。
标签: jquery asp.net session ihttphandler