HttpModule не получает куки на IIS 6 - PullRequest
2 голосов
/ 29 марта 2012

У меня есть HttpModule, который я создал и работаю на IIS 6 с использованием Windows Server 2003. Я могу отправлять куки в браузер, но не могу прочитать их при следующем запросе, куки всегда нулевые.

Если я запускаю этот модуль на IIS 7, он работает нормально. IIS 7 на данный момент не вариант, так как мы не переключились, и это нужно сделать до того, как это произойдет.

Кроме того, я уже пытался использовать хук PostAcquireRequestState.

    public void Init(HttpApplication httpApp)
    {
        httpApp.BeginRequest += OnBeginRequest;
    }

    public void OnBeginRequest(Object sender, EventArgs e)
    {
        var httpApp = (HttpApplication)sender;
        var context = httpApp.Context;

        const string cookieName = "sId";

        if (!string.IsNullOrEmpty(context.Request.QueryString["cookie"]))
        {
            var ck = new HttpCookie(cookieName)
                            {
                                Value = httpApp.Context.Request.QueryString["cookie"],
                                Expires = DateTime.Now.AddDays(1)
                            };

            httpApp.Response.Cookies.Add(ck);
        }
        else
        {
            var cookie = httpApp.Request.Cookies[cookieName]
        }
    }

Ответы [ 3 ]

3 голосов
/ 18 октября 2012

Я столкнулся с подобной проблемой, но у меня было другое решение, поэтому я решил поделиться, если это кому-нибудь поможет.Я также принял предложение Цзэнчуня, чтобы использовать некоторые инструменты для проверки заголовков запросов и ответов.Поскольку я использую IE, F12 Dev Tools отлично подходит для этого.Как только я увидел заголовок ответа для файла cookie, я заметил, что установлен безопасный флаг.Конечно же, я скопировал код с рабочего сайта, размещенного по протоколу SSL, на тестовый сайт, который не использовал SSL, поэтому флаг безопасности на куки-файле не позволил коду прочитать его.Я обновил web.config, чтобы удалить requireSSL из узла httpcookies, и мой сайт начал работать.:)

1 голос
/ 29 марта 2012

ваш код выглядит сработавшим. На стороне клиента может возникнуть проблема, как запросить следующую страницу. Вы можете использовать firebug с firefox или инструменты fidder, которые могут регистрировать ваш запрос на стороне клиента и видеть запрос на отправку значение cookd в заголовке запроса к серверу.

например

заголовки запроса:

get /1.aspx
.....
Cookie: sId=123 [if the client has a cookie then it will appear in here.] 

заголовки ответа:

Set-Cookie: sId=123; expires=Fri, 30-Mar-2012 07:20:23 GMT; 
path=/

если сервер добавляет cookie к ответу, то ответ выглядит так, как указано выше.

Теперь, я думаю, проблема в вашем домене для кулинаров или в вашем пути к cookie-файлам.

лучший способ установить cookie - это следующий код:

var ck = new HttpCookie(cookieName)
{
   Value = httpApp.Context.Request.QueryString["cookie"],
   Expires = DateTime.Now.AddDays(1),
   Path="/",
   Domain="your domain"
};

удачи.

0 голосов
/ 29 марта 2012

Благодаря zhengchun я смог добраться до корня проблемы.Оказывается, я не смог установить cookie, используя запросы к статическим файлам.Я создал файлы .aspx для моих начальных запросов, которые перенаправлялись в статические файлы после установки cookie.Мой HttpModule мог прочитать cookie после установки в файл .aspx.Не уверен, зачем мне нужен файл .aspx, чтобы установить cookie вместо HttpModule, но это исправило это.

...