2012-03-28 3 views
2

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

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

Кроме того, я уже пробовал использовать hook 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] 
     } 
    } 

ответ

1

код проблема взгляд worked.the может происходить в стороне клиента, как запросить следующий page.you может использовать поджигатель с светлячок или 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=/ 

если сервер добавить печенье в ответ, то ответ на это смотреть, как выше.

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

лучший способ установить куки, как код наблюдения:

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

удачи.

+0

Большое спасибо за помощь. Это привело меня к реальному корню проблемы, и я не мог отправлять файлы cookie поверх статических запросов файлов. Моим первоначальным запросом должен быть файл .asp или .aspx, чтобы установить cookie, тогда мой HttpModule может читать файлы cookie по мере необходимости. Извините за бит информации о пропуске в начале, я мог бы поклясться, что на самом деле сервер читает cookie, lol. – James

+0

приветствую вас, я знаю, почему вы грустите приложение IIS7 в порядке. Потому что вы используете интегрированный пул в IIS7. – zhengchun

0

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

3

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