IRequiresSessionState не работает - PullRequest
       28

IRequiresSessionState не работает

2 голосов
/ 13 ноября 2011

Я уже давно борюсь с этим.

Я реализовал базовый 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.

Мой файл web.config выглядит следующим образом:

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

Затем я открываю IIS (IIS 7.0) инеобходимо щелкнуть правой кнопкой мыши папку «Тест» на веб-сайте по умолчанию и нажать «Преобразовать в приложение».Это делает его сайтом.

Затем я захожу в браузер и захожу на http://localhost/Test/

Затем я получаю что-то подобное: fxnjswtkkzs1silahvpf5xun 09: 48: 52.9194609

Если я нажму F5 или обновлю страницу, идентификатор сессии изменится.Этого не должно быть.

Я просто не могу понять это.И самое смешное, это сработало вчера.Может кто-нибудь, пожалуйста, помогите ....

пс, то же поведение в Firefox и т. Е.

заранее спасибо

1 Ответ

2 голосов
/ 13 ноября 2011

Да, вы должны получать новый 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"]);
}
...