【问题标题】:Session values lost in an ASP.NET applicationASP.NET 应用程序中丢失的会话值
【发布时间】: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


【解决方案1】:

如果有人遇到这个问题,我想说明这是因为我在 ProcessRequest 方法中使用了一些文件操作。

var doc = XDocument.Load (@"c:\XO_Game_Website\bin\test.xml"); 
if (context.Session ["something"] == null) 
{ 
    context.Session.Add("something", "something"); 
    doc.Root.Element ("xxx").Value = "null"; 
} 
else 
{
    doc.Root.Element ("xxx").Value = "not null";
}
doc.Save("path"); 

一旦我删除了 doc.Save("path");从方法来看,一切正常。尽管如此,我还是不明白为什么文件操作代码会重置会话值。

编码愉快。

【讨论】:

  • 如果您更改 bin 文件夹中的文件,应用程序将重新启动(您可以将新的/更改的 dll 放在那里)。在应用重新启动时,所有会话都将被清除。
  • 我遇到了同样的问题,但我没有写入 bin 文件夹......我正在创建一个新文件夹,但它也暗示应用程序重新启动。这篇文章拯救了这一天。
猜你喜欢
  • 2022-08-20
  • 1970-01-01
  • 2011-04-02
  • 2017-09-20
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2012-08-17
  • 2019-07-18
相关资源
最近更新 更多