IRequiresSessionState does not work

本文关键字:work not does IRequiresSessionState | 更新日期: 2023-09-27 18:14:16

我已经纠结了一段时间了。

我用以下代码实现了一个基本的IHttpHandler,并且SESSION不断更新:

namespace ClassLibrary1
{
    public class MyHandler : IHttpHandler, IRequiresSessionState
    {
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            context.Response.Write(context.Session.SessionID + "</br>");
            context.Response.Write(DateTime.Now.TimeOfDay.ToString() + "</br>");
        }
    }
}
如您所见,非常简单的代码。然后我简单地创建一个文件夹c:'Inetpub'wwwroot'Test。然后,我添加了一个bin文件夹,并将我的dll放入bin文件夹。

我的网页。配置文件看起来像这样:

<configuration>
<system.webServer>
      <handlers>
        <add verb="*.x" path="*" name="MyHandler" type="ClassLibrary1.MyHandler" />
      </handlers>
    </system.webServer>
</configuration>

然后我打开IIS (IIS 7.0),我必须右键单击默认网站下的测试文件夹,然后单击转换为应用程序。这使它成为一个站点。

然后打开浏览器进入http://localhost/Test/

我得到这样的东西:fxnjswtkkzs1silahvpf5xun09:48:52.9194609

按F5键或刷新界面,会话id会发生变化。这是不应该发生的。

我就是想不明白。有趣的是,它昨天还起作用了。谁能帮帮我....

ps,在firefox和ie中有相同的行为

thanks in advance

IRequiresSessionState does not work

是的,你应该得到一个新的SessionID每一次,不仅在你的GenericHandler,而且在一个简单的ASPX页面除非你访问你的Session对象。试试这个:

public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";
    object o = context.Session["counter"];
    if (o == null)
        context.Session["counter"] = 1;
    else
        context.Session["counter"] = ((int) o) + 1;
    context.Response.Write(context.Session.SessionID + "'r'n");
    context.Response.Write(context.Session["counter"]);
}