Condividi tramite


I cookie aggiunti da un httpModule gestito non sono disponibili per IHttpModules nativo o IHttpHandlers

Questo articolo consente di risolvere il problema in cui i cookie aggiunti da un gestito non sono disponibili per native IHttpModules o IHttpHandlers.

Versione originale del prodotto: Internet Information Services
Numero KB originale: 2666571

Sintomi

Quando si usa la Cookies raccolta da oggetti o gestiti HttpResponse HttpRequest per aggiungere un cookie, il cookie non viene visualizzato nell'oggetto nativoIHttpRequest.

Causa

L'insieme Cookies negli oggetti gestiti HttpRequest e HttpResponse non dispone di una raccolta corrispondente nell'oggetto IHttpRequest o IHttpResponse in Internet Information Services (IIS). Pertanto, l'aggiunta o la modifica di una di queste raccolte non modifica l'intestazione Cookie nell'oggetto IHttpRequest .

Risoluzione

Per modificare un cookie specifico nell'intestazione dell'oggetto Cookie nativo IHttpRequest dal codice gestito, modificare l'intestazione Cookie direttamente nella raccolta dell'oggetto Header gestito HttpRequest anziché tramite la Cookies raccolta.

Ulteriori informazioni

L'esempio seguente indica che il codice gestito HttpModule aggiungerà il cookie alle intestazioni nell'oggetto IHttpRequest nella pipeline IIS.

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;

namespace AddCookieModule
{
    public class AddCookieClass : IHttpModule
    {
        private void Application_BeginRequest(Object source EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            HttpCookie testCookie = new HttpCookie("testCookie",
            DateTime.Now.ToString());
            testCookie.Expires = DateTime.Now.AddYears(5);
            context.Request.Headers.Add("Cookie",
                                        "testCookie=" + testCookie.Value);
            context.Response.Cookies.Add(testCookie);
        }

        public void Dispose()
        {
            // nothing to do.
        }

        public void Init(HttpApplication context)
        {
            context.BeginRequest +=
                (new EventHandler(this.Application_BeginRequest));
        }
    }
}